“ls”コマンドで隠しファイルは出力したいが “.” と “..” は出力させない

2023-03-27Bash

はじめに

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 が使えることを学びました。

2023-03-27Bash