ディレクトリ内の隠しファイルと*を一致させる方法


21

指定されたディレクトリ内の隠しファイルを一致させる方法

例えば

以下のコマンドを指定しても、隠しファイルの結果は表示されません。

 du -b maybehere*/*

使用する代わりに単一のコマンドを使用してこれを簡単に達成する方法

du -b maybehere*/.* maybehere*/*

多分ここに2回入力する必要があるので。


非表示にしてみて、maybehere*/.*上記のすべてに追加します
コスタ

1
編集により追加の制限が設定された新しい質問が作成されます。これにより、Qが移動ターゲットになり、既に与えられた回答が無効になる可能性があります。それは悪いマナーです。もしあれば新しい質問をしてください。
アントン

回答:


22

ブレースの拡張を活用します。

du -b maybehere*/{*,.[^.],.??*}

または代わりに

du -b maybehere*/{,.[^.],..?}*

この背後にあるロジックはおそらく明らかではないので、ここに説明があります。

  • * 隠されていないすべてのファイルに一致
  • .[^.]名前が単一のドットで始まり、その後にドットが続かないファイルに一致します。最初の形式では2文字のファイル名のみです。
  • .??* 少なくとも3文字の長さの隠しファイルに一致します
  • ..?* 上記と同じですが、2番目の文字はドットでなければなりません

全体のポイントは、現在および親ディレクトリ(.および..)へのハードリンクを除外することですが、通常のファイルはすべて、それぞれが1回だけカウントされるように含めます。

たとえば、最も簡単なのは

du -b maybehere*/{.,}*

これは、リストにドット.と「なし」(なし,と終了})が含まれているため、すべての隠しファイル(ドットで始まる)とすべての非表示でないファイル(「なし」で始まる)が一致することを意味します。問題は、これもとに一致することで.あり..、これはおそらくあなたが望むものではないため、どういうわけか除外する必要があります。


ブレースの拡張についての最後の言葉。

中括弧の展開は、より少ない文字を書くことにより、コマンドラインにより多くのファイル/文字列/その他を含めることができるメカニズムです。構文は{word1,word2,...}、つまり、で始まり{で終わるコンマ区切りの文字列のリストです}bashマニュアルには、非常に基本的であると同時に非常に一般的な使用例が記載されています。

$ echo a{b,c,d}e
abe ace ade

{ }私は何の用途がありますか:(それについての詳細情報を取得する方向を教えてもらえますか
vidhan

@vidhanが編集を確認しman bash、「ブレース拡張」の章を見てください。
jimmij

上記のことについてもっと詳しく説明してもらえますか?これらのことで私が新しいので、すべてのものがどのように機能するかを少し明確に説明してください@jimmij
vidhan

6
.??*一致.a.bませ.[^.]*ん、... 一致しません..foo
ステファンシャゼル

4
.fooとの両方に一致.[^.]*.??*ます。あなたが欲しい{.[!.],..?,}*
ステファンシャゼル

14

すでにGNU固有の構文(-b)を使用しているため:

du -abd1 maybehere*/

そうすればdumaybehere*ディレクトリ内のファイルがリストされます(ドットファイルは除外されません)。-d1ディスク使用量のレポートを1レベル下に制限します(での非ディレクトリを含む-a)。

それ以外の場合、グロブに隠しファイル(.およびを除く..)を含めるには、各シェルに独自の構文があります。

  • zsh

    du -b maybehere*/*(D)
  • ksh93

    (FIGNORE='@(.|..)'; du -b maybehere*/*)
  • bash

    (shopt -s dotglob; du -b maybehere*/*)
  • tcsh

    (set globdot; du -b maybehere*/*)
  • yash

    (set -o dot-glob; du -b maybehere*/*)

    しかし、それは含まれて用心.し、..その結果、それらを含むシステム上でreaddir() 、それはほとんど使用可能になりました。


8

別のオプションはここから入手できます

du -sm .[!.]* *

で始まるファイル名をスキップしたいのはなぜ..ですか?
クサラナナンダ

2
おそらく、彼らは../以下のすべてをリストしたくないからです。
シャドゥール

これは、例えば..myfile;のようなファイルを数えません。..?*そのために追加します。ただし、負の一致に適切なglob構文を使用する場合は+1。
ペドロジメノ

0

隠しディレクトリをリストするか、隠しディレクトリを操作したい場合は、コスタスが言ったように使用できます

du -b maybehere*/.*

これにより、隠しファイルとディレクトリを操作できます。隠しディレクトリだけが必要な場合は、それを指定できます

du -b maybehere*/.*/


あなたは再び、私はそれを少し編集した@SailorCireの質問を参照してくださいすることができます
vidhan

@vidhanでは、1つのディレクトリ内の非表示でのみ作業したいですか?あれは正しいですか?
セーラーサイア

いいえ、私は代わりに、両方を使用する1つのディレクトリ内の両方に隠さと非隠しファイルを一致させたいデュmaybehere*/.*maybehere*/*のための隠されたのと別の非隠さ
vidhan

@vidhan du -bは、非表示と非表示の両方を取得します。
SailorCire

いいえ:(残念ながら@SailorCire
vidhan

0

直接シェルではありませんが、このように深さを制限してfindを使用できます

find maybehere -maxdepth 1 -exec du -sh {} \;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.