ls -d .*
は、非表示の「アイテム」(ファイルとディレクトリ)のみを一覧表示します。 (私は思う)技術的には、現在の.
以上の.
ディレクトリを含む、..
で始まるすべてのアイテムをリストします。
また、ls -A
は「ほぼすべて」のアイテムを一覧表示し、非表示のアイテムと非表示のアイテムの両方を一覧表示しますが、.
と..
は除きます。ただし、これらをls -dA .*
として組み合わせても、非表示のアイテムの「ほとんどすべて」がリストされません。
非表示のアイテムのみを一覧表示する場合、.
と..
を除外するにはどうすればよいですか?
これは buntuに質問 で回答されています。これをここで再現します:
ls -d .!(|.)
とBashの拡張グロブ(shopt -s extglob
有効にする)
ls -d .[!.]* ..?*
そうでない場合
.
と..
を除くすべてのケースを組み合わせることができます 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はそれを許可します))。
.
と..
なしで隠しファイルを一覧表示したいだけの場合
ls -ld .[!.]*
.
または..
なしで隠されているかどうかに関係なく、すべてのファイルを一覧表示したい場合は、次のように使用できます。
ls -lA
これには、長いリストを表示するl
と、.
と..
なしで非表示および非表示のアイテムを表示するA
が含まれます
-d
は、ディレクトリではなく、ディレクトリをリストします。現在のフォルダーの内容を一覧表示するだけなので、必要ありません。
長いリストが必要ない場合は、-l
を削除してください。