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

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

$ 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

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

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

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

$ 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」を組み合わせないといけない点に注意。
組み合わせを行わない場合、フルパスでは表示されない。

$ 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」コマンドを組み合わせて実行してあげる必要がある。

$ 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を入れいているけど、そこで対象のディレクトリを指定すればいい。
これで、中のファイルをフルパス付きでサブディレクトリの中も出力出来る。