lsコマンドを単独で使用して、隠しファイルをディレクトリから表示しようとしています。bashでlsコマンドだけを使用してディレクトリ内の隠しファイルのみを表示する方法
ls -lAd .*
しかし、コマンドが返されます。ディレクトリ名も出力に表示されます。 lsで "A"オプションを指定したにもかかわらず、このコマンドの何が間違っていますか。
lsコマンドを単独で使用して、隠しファイルをディレクトリから表示しようとしています。bashでlsコマンドだけを使用してディレクトリ内の隠しファイルのみを表示する方法
ls -lAd .*
しかし、コマンドが返されます。ディレクトリ名も出力に表示されます。 lsで "A"オプションを指定したにもかかわらず、このコマンドの何が間違っていますか。
これは参考用ですが、回答は@anishsane belowです。
あなたのグロブは間違っている:
.*
は.
、および..
に展開されます。あなたのような何かにグロブを変更することができ、次のいずれか
.??*
が、これは次のように隠しファイルと一致しません:、.a
.b
を。
ls -lAd .[^.]* ..?*
しかし、その意志最も可能性の高いyeild:ls: error: ..?* no such file or directory
または.[^.]*
が、それは、両方のオプションであるかもしれない組み合わせ、..a
、..b
などのファイルと一致しません。これは、しかしにls
からパイプの出力を一切隠しファイルがディレクトリにない場合、現在の作業ディレクトリ(.
)が表示されますこれは、ls -lAd
に展開することができます
オルタナティブます
shopt -s nullglob
ls -lAd .[^.]* ..?*
:nullglobを有効にすると、これを防ぐことができますawk
、それは最も可能性の高い色を取り除くます:
ls -lA | awk '$9 ~ /^\./'
も読んでみてください:Why you shouldn't parse the output of ls(1)
でも 'nullglob'であっても、隠しファイルやディレクトリがなければ、2つのグロブ'。[^。] * '&' ..?* 'は何もない(空文字列)に展開されます。これは 'ls -lAd'コマンドだけを実行し、結果として' .'を与えます。 – anishsane
@anishsaneあなたは正しいです。私に気づいてくれてありがとう!私は参考として私の答えを保つだろうが、私はあなたがより良い解決策を提供したことを見ることができます:-) – andlrc
私は少し遅れて - nullglobセット、あなたまたは私の - 両方の答えが同じように動作することを実現しました。だからnullglobで、 'echo![^。] * ..?*'や 'f in。[^。] * ..?*'のような他の構文に渡すべきです。 nullグロブが設定されていなければ、私たちの答えは 'file。[^。] * ..?* not found 'や' file。* not found'というエラーを出力します... – anishsane
内部変数GLOBIGNORE
を使用できます。
$ GLOBIGNORE=.:..
$ ls -ld .*
thanks @anishsane。しかし、私がスクリプトの中に好きなように設定すると、スクリプトから抜け出す前にGLOBIGNOREを何らかの方法で解除する必要がありますか? –
スクリプトを実行し、ソースを作成しないと仮定すると、変数の設定を解除する必要はありません。 – anishsane
'.'と' ..'も隠しファイルです –
あなたのワイルドカードは '.'と' ..'にもマッチします。 –
@TristanTそれは問題である '。*'です。 '-A'は' .whatever'を表示しますが、 '.'と' ..'をスキップします[それを含む '-a'とは異なります]。私は '私はそれだけでそれを行うことができるのか分からない。私は 'ls -lAd | grep '^ [。]' '。 'ls -l'形式の' grep'を適切に調整してください。 –