“ls”コマンドで隠しファイルは出力したいが “.” と “..” は出力させない
Contents
はじめに
man
や --help
を調べればすぐわかりますが、使えると思いましたので投稿します。
検証環境
$ uname -moi
x86_64 x86_64 GNU/Linux
$ bash -version | head -n 1
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
ls
コマンド
オプション無しで実行
隠しファイルは見つかりません。
$ pwd
/root
$ ls | wc -l
1
$ ls
anaconda-ks.cfg
-a
オプション付きで実行
-a
オプション付きで実行すると、隠しファイル(ディレクトリを含む)を含めてファイルが一覧表示されます。
ただし、カレントディレクトリを表す "." と 親ディレクトリを表す ".." が出力されてしまいます。
$ pwd
/root
$ ls -a | wc -l
10
$ ls -a
. .. .bash_logout .bash_profile .bashrc .cshrc .lesshst .pki .tcshrc anaconda-ks.cfg
-A
オプション付きで実行
-a
オプションの代わりに -A
オプションを使うと、隠しファイル(ディレクトリを含む)が表示されますが、 .
や ..
が対象から除外されます。対象は -a
オプション付きのときより2ファイル少ない、8ファイルとなっています。
$ pwd
/root
$ ls -A | wc -l
8
$ ls -A
.bash_logout .bash_profile .bashrc .cshrc .lesshst .pki .tcshrc anaconda-ks.cfg
注意:隠し「ディレクトリ」を除外したい場合
.
や ..
だけでなく、隠しディレクトリ( ex : .pki
)も対象から除外したい場合もあります。
ファイルのみに限定したい場合はファイルの識別子を表示させる -F
オプションと組み合わせることで対処できます。
$ ls -F
anaconda-ks.cfg
# .pki/ ディレクトリの後方に "/" が表示され、ディレクトリであることがわかる
$ ls -A -F
.bash_logout .bash_profile .bashrc .cshrc .lesshst .pki/ .tcshrc anaconda-ks.cfg
# "/" で終わるものを除外
$ ls -A -F | grep -v '/$'
.bash_logout
.bash_profile
.bashrc
.cshrc
.lesshst
.tcshrc
anaconda-ks.cfg
最も、この方法であれば -a
オプションでも問題ないことになりますが。。。
$ ls -a -F | grep -v '/$'
.bash_logout
.bash_profile
.bashrc
.cshrc
.lesshst
.tcshrc
anaconda-ks.cfg
その他、 find
を使う方法もあります。
$ find . -maxdepth 1 -type f
./anaconda-ks.cfg
./.bash_profile
./.tcshrc
./.cshrc
./.bashrc
./.bash_logout
./.lesshst
ひとこと
今まではずっと find
方式でやっていたが、 ls -A
が使えることを学びました。
ディスカッション
コメント一覧
まだ、コメントがありません