2016-06-16 11 views
0

lsコマンドを単独で使用して、隠しファイルをディレクトリから表示しようとしています。bashでlsコマンドだけを使用してディレクトリ内の隠しファイルのみを表示する方法

ls -lAd .* 

しかし、コマンドが返されます。ディレクトリ名も出力に表示されます。 lsで "A"オプションを指定したにもかかわらず、このコマンドの何が間違っていますか。

+0

'.'と' ..'も隠しファイルです –

+0

あなたのワイルドカードは '.'と' ..'にもマッチします。 –

+0

@TristanTそれは問題である '。*'です。 '-A'は' .whatever'を表示しますが、 '.'と' ..'をスキップします[それを含む '-a'とは異なります]。私は '私はそれだけでそれを行うことができるのか分からない。私は 'ls -lAd | grep '^ [。]' '。 'ls -l'形式の' grep'を適切に調整してください。 –

答えて

1

これは参考用ですが、回答は@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)

+0

でも 'nullglob'であっても、隠しファイルやディレクトリがなければ、2つのグロブ'。[^。] * '&' ..?* 'は何もない(空文字列)に展開されます。これは 'ls -lAd'コマンドだけを実行し、結果として' .'を与えます。 – anishsane

+0

@anishsaneあなたは正しいです。私に気づいてくれてありがとう!私は参考として私の答えを保つだろうが、私はあなたがより良い解決策を提供したことを見ることができます:-) – andlrc

+0

私は少し遅れて - nullglobセット、あなたまたは私の - 両方の答えが同じように動作することを実現しました。だからnullglobで、 'echo![^。] * ..?*'や 'f in。[^。] * ..?*'のような他の構文に渡すべきです。 nullグロブが設定されていなければ、私たちの答えは 'file。[^。] * ..?* not found 'や' file。* not found'というエラーを出力します... – anishsane

3

内部変数GLOBIGNOREを使用できます。

$ GLOBIGNORE=.:.. 
$ ls -ld .* 
+0

thanks @anishsane。しかし、私がスクリプトの中に好きなように設定すると、スクリプトから抜け出す前にGLOBIGNOREを何らかの方法で解除する必要がありますか? –

+0

スクリプトを実行し、ソースを作成しないと仮定すると、変数の設定を解除する必要はありません。 – anishsane

関連する問題