隠された項目だけがリストされている場合、どうすれば除いて..できますか?

隠された項目だけがリストされている場合、どうすれば除いて..できますか?

ls -d .*隠された「アイテム」(ファイルとディレクトリ)のみをリストします。技術的に(私の考えでは)で始まるすべてのプロジェクトをリストします.。これには現在のディレクトリ.と上記のディレクトリが含まれます..

ls -Aまた、「ほとんどすべての」項目が一覧表示され、非表示の項目と非表示の項目が一覧表示されますが、含まれていないことがわかり.ます..。しかし、それらを組み合わせても、ls -dA .*私の隠されたアイテムの「ほとんどすべての」アイテムはリストされません。

除外する方法と隠された項目だけがリストされている場合は何ですか...

答え1

sum 1を.除くすべてのケースを組み合わせることができます。また、特殊ファイル名もブロックされません。..

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

ディレクトリに実際にコンテンツが多すぎてコマンドが失敗する危険性がある場合は、それを代わりに使用Argument list too longできます(ただし、-printf '%f\n'先行を削除するオプションは./GNU findに固有のものであり、-maxdepthPOSIXには存在しません)。

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

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

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

1 :POSIX は、角かっこが次から始まることを指定します。[![^正規表現などのファイル名拡張子の文字を否定するために使用すると、結果は指定されません(例:強く打つ許可する))。

答え2

これは以下から回答されました。Ubuntuに尋ねる、ここで再現します。

ls -d .!(|.)Bashの拡張globを使用(shopt -s extglob有効)

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

答え3

.およびなしで隠されたファイルのみをリストしたい場合..

ls -ld .[!.]*

非表示に関係なくすべてのファイルを一覧表示するには、.次のように..します。

ls -lA

これにはl長いリストが含まれ、A非表示項目と非表示項目の表示が含まれます...

-d内容を一覧表示せずにディレクトリのみを一覧表示します。現在存在するフォルダの内容だけを一覧表示しようとしているので、必要ありません。

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

答え4

UNIXあなたが観察した問題は、1970年代初頭にさかのぼるハッカー攻撃の結果です。コードサイズを減らすために、ディレクトリには実際のディレクトリがあり、.エントリ..は現在のディレクトリと古いディレクトリへのディレクトリハードリンクとして実装されています。最新のファイルシステムは内部構造が異なります。

この問題を解決する良い方法は、式の一致するファイルのリストにおよびを含まないシェルを選択することです....*

bosh殻がまさにそうですmksh。シェルをテストするには、次を呼び出すことをお勧めします。

mkdir /tmp/t
cd /tmp/t
echo .*

結果は次のとおりです。

. ..

次の結果が得られると、シェルは一致する結果に次のパターンを含めます。

.*

あなたのシェルは.結果から除外されます。..ただし、この結果はエントリのないファイルシステムによって引き起こされる可能性があるため、.次の..点も確認してください。

ls -Fa

このファイルをリストします。

POSIXこれはしばらく前に変更され、この動作を許可します。ファイルシステムがこれらのディレクトリを物理的にサポートする必要さえないため、将来のバージョンPOSIXでは一致結果におよび.を含めることができない可能性があります。..唯一の要件POSIXは、そのパスにアクセスするときに予想される動作を達成することです。

関連情報