lsコマンドでフルパス表示をする方法

lsコマンドはよく利用すると思うが、その際に普通にコマンドを実行すると以下のようになる。

shell
$ ls -l /home/test 合計 96 -rw-rw-r-- 1 test test 6808 7月 6 11:25 2014 archey-0.2.6-6.noarch.rpm -rw-r--r-- 1 root root 73 6月 28 18:39 2014 ipmi.list -rw-r--r-- 1 root root 551 6月 29 13:11 2014 ipmi.sh drwxrwxrwx 4 chef-ope chef-ope 4096 7月 6 11:35 2014 scrot-0.8 -rw-r--r-- 1 root root 74324 10月 2 04:39 2009 scrot-0.8.tar.gz

このとき、出力されるディレクトリやファイルをフルパス表示するには、どうすればいいのだろうか?
実は、以下のようにコマンドを実行することで可能となる。

shell
$ ls -ld /home/test/* -rw-rw-r-- 1 test test 6808 7月 6 11:25 2014 /home/test/archey-0.2.6-6.noarch.rpm -rw-r--r-- 1 root root 73 6月 28 18:39 2014 /home/test/ipmi.list -rw-r--r-- 1 root root 551 6月 29 13:11 2014 /home/test/ipmi.sh drwxrwxrwx 4 chef-ope chef-ope 4096 7月 6 11:35 2014 /home/test/scrot-0.8 -rw-r--r-- 1 root root 74324 10月 2 04:39 2009 /home/test/scrot-0.8.tar.gz

「-d」オプションでディレクトリを表示させて、その中のファイルをワイルドカードで指定することでフルパス表示が可能になる。

なお、上記の出力の仕方の場合、隠しファイル(「.」から始まるファイル)が出力されないはずである。
隠しファイルも出力させたい場合は、末尾のワイルドカード「*」を正規表現で隠しファイルも指定した「{*,.*}」に変える事で隠しファイルも出力させることが出来る。

shell
$ ls -ld /home/test/{*,.*} drwx------ 6 test test 4096 8月 9 15:39 2014 /home/test/. drwxr-xr-x. 12 root root 4096 6月 22 20:03 2014 /home/test/.. -rw------- 1 test test 881 9月 7 17:02 2014 /home/test/.bash_history -rw-r--r-- 1 test test 18 7月 18 22:19 2013 /home/test/.bash_logout -rw-r--r-- 1 test test 176 7月 18 22:19 2013 /home/test/.bash_profile -rw-r--r-- 1 test test 124 7月 18 22:19 2013 /home/test/.bashrc drwxr-xr-x 3 test test 4096 5月 27 17:51 2014 /home/test/.gnome2 drwxr-xr-x 4 test test 4096 4月 26 22:10 2014 /home/test/.mozilla drwxrw---- 3 test test 4096 7月 6 11:24 2014 /home/test/.pki -rw-rw-r-- 1 test test 6808 7月 6 11:25 2014 /home/test/archey-0.2.6-6.noarch.rpm -rw-r--r-- 1 root root 73 6月 28 18:39 2014 /home/test/ipmi.list -rw-r--r-- 1 root root 551 6月 29 13:11 2014 /home/test/ipmi.sh drwxrwxrwx 4 chef-ope chef-ope 4096 7月 6 11:35 2014 /home/test/scrot-0.8 -rw-r--r-- 1 root root 74324 10月 2 04:39 2009 /home/test/scrot-0.8.tar.gz

なお、上記のやり方ではフルパス指定をしないといけないので、カレントディレクトリの出力をさせる場合は、環境変数「$PWD」を組み合わせないといけない点に注意。
組み合わせを行わない場合、フルパスでは表示されない。

shell
$ ls -ld $PWD/* -rw-rw-r-- 1 test test 6808 7月 6 11:25 2014 /home/test/archey-0.2.6-6.noarch.rpm -rw-r--r-- 1 root root 73 6月 28 18:39 2014 /home/test/ipmi.list -rw-r--r-- 1 root root 551 6月 29 13:11 2014 /home/test/ipmi.sh drwxrwxrwx 4 chef-ope chef-ope 4096 7月 6 11:35 2014 /home/test/scrot-0.8 -rw-r--r-- 1 root root 74324 10月 2 04:39 2009 /home/test/scrot-0.8.tar.gz

まぁ、コマンド実行時にフルパス指定するように心がけるだけなんだけど…

後この実行方式だと、「-R」オプションが有効にならないため、再帰的にサブディレクトリの表示をさせることができない。
そのため、サブディレクトリを含んでフルパス出力させる場合は、「find」コマンドを組み合わせて実行してあげる必要がある。

shell
$ ls -ul $(find /home/test/test -type f ) -rw-r--r-- 1 root root 0 10月 21 18:36 2014 /home/test/test/.aaaa -rw-r--r-- 1 root root 0 10月 21 13:25 2014 /home/test/test/11111 -rw-r--r-- 1 root root 0 10月 21 13:25 2014 /home/test/test/11112 -rw-r--r-- 1 root root 0 10月 21 13:25 2014 /home/test/test/11113 -rw-r--r-- 1 root root 0 10月 21 13:25 2014 /home/test/test/11114 -rw-r--r-- 1 root root 0 10月 21 13:25 2014 /home/test/test/11115 -rw-r--r-- 1 root root 0 10月 21 18:36 2014 /home/test/test/test/.bbbb -rw-r--r-- 1 root root 0 10月 21 18:36 2014 /home/test/test/test/.cccc -rw-r--r-- 1 root root 0 10月 21 13:26 2014 /home/test/test/test/11111 -rw-r--r-- 1 root root 0 10月 21 13:26 2014 /home/test/test/test/11112 -rw-r--r-- 1 root root 0 10月 21 13:26 2014 /home/test/test/test/11113 -rw-r--r-- 1 root root 0 10月 21 13:26 2014 /home/test/test/test/11114 -rw-r--r-- 1 root root 0 10月 21 13:26 2014 /home/test/test/test/11115

()内にfindを入れいているけど、そこで対象のディレクトリを指定すればいい。
これで、中のファイルをフルパス付きでサブディレクトリの中も出力出来る。