web-dev-qa-db-ja.com

どうすれば除外できますか。および..非表示のアイテムのみを一覧表示する場合?

ls -d .*は、非表示の「アイテム」(ファイルとディレクトリ)のみを一覧表示します。 (私は思う)技術的には、現在の.以上の.ディレクトリを含む、..で始まるすべてのアイテムをリストします。

また、ls -Aは「ほぼすべて」のアイテムを一覧表示し、非表示のアイテムと非表示のアイテムの両方を一覧表示しますが、...は除きます。ただし、これらをls -dA .*として組み合わせても、非表示のアイテムの「ほとんどすべて」がリストされません。

非表示のアイテムのみを一覧表示する場合、...を除外するにはどうすればよいですか?

1
jonnybolton16

これは buntuに質問 で回答されています。これをここで再現します:

ls -d .!(|.)とBashの拡張グロブ(shopt -s extglob 有効にする)

ls -d .[!.]* ..?*そうでない場合

1
jonnybolton16

...を除くすべてのケースを組み合わせることができます 1。これは、特別なファイル名にも影響しません。

ls -d .[!.]* ..?*

ディレクトリのコンテンツが多すぎて、コマンドがArgument list too longで失敗するリスクがある場合は、代わりにこれを使用できます(ただし、先頭の-printf '%f\n'を削除するオプションの./はGNU検索し、-maxdepthはPOSIXに存在しません):

find . -maxdepth 1 -name '.*' ! '(' -name . -o -name .. ')' -printf '%f\n'  

次に、LFなどの特殊文字を処理するには、-print0などのオプションを使用できますが、すべてのツールでサポートする必要があります(GNUまたはFreeBSDのバリアントでは、GNUのみで表示され、置き換え可能な-printf '%f\0'を除き、サポートしています。 -print0を使用しますが、先頭を./のままにします):

find . -maxdepth 1 -name '.*' ! '(' -name . -o -name .. ')'   -printf '%f\0'| sort -z | xargs -0 [...]

1: POSIXは、ファイル名展開で文字を否定するために、角かっこを[! として指定しますが、結果が指定されていない[^(regexの場合)ではありません(たとえばbashはそれを許可します))。

2
A.B

...なしで隠しファイルを一覧表示したいだけの場合

ls -ld .[!.]*

.または..なしで隠されているかどうかに関係なく、すべてのファイルを一覧表示したい場合は、次のように使用できます。

ls -lA

これには、長いリストを表示するlと、...なしで非表示および非表示のアイテムを表示するAが含まれます

-dは、ディレクトリではなく、ディレクトリをリストします。現在のフォルダーの内容を一覧表示するだけなので、必要ありません。

長いリストが必要ない場合は、-lを削除してください。

1
Nasir Riley