普通にlsコマンドを利用した場合ではファイルのフルパス名を取得することができません。
以下のようにlsコマンドを実行すれば、パス名付きで表示されますが、lsコマンドの引数に対し、フルパスと最後に*をつけないといけません。(少々面倒です)
$ ls -dF /home/sakura/* /home/sakura/japan/ /home/sakura/sakura.txt /home/sakura/world/ /home/sakura/kiku.txt /home/sakura/tsubaki.txt
フルパスを取得したい場合は、findコマンドを利用すると便利です。
特定のファイルのフルパスを取得する場合は、readlinkが便利です。
別途記事を公開しているので、以下のリンクで記事を参照してください。
ファイルのフルパスを取得する・readlink
findコマンドを利用すれば簡単にファイルのフルパス名を取得することができます。
今回は、findを使ったひとつの例を記述します。
find `pwd` -maxdepth 1 -mindepth 1
上記のコマンドの意味は pwd コマンドにより、現在のカレントディレクトリを取得し、-maxdepthによりディレクトリ階層を指定しています。
ホームディレクトリの状態は以下のようになっています。
$ ls -ltr 合計 8 drwxrwxr-x 2 sakura sakura 4096 11月 15 18:20 japan drwxrwxr-x 2 sakura sakura 4096 11月 15 18:21 world -rw-rw-r-- 1 sakura sakura 0 11月 15 18:21 sakura.txt -rw-rw-r-- 1 sakura sakura 0 11月 15 18:21 tsubaki.txt -rw-rw-r-- 1 sakura sakura 0 11月 15 18:21 kiku.txt [sakura@centos ~]$ pwd /home/sakura
find `pwd` -maxdepth 1
[sakura@centos ~]$ find `pwd` -maxdepth 1 /home/sakura /home/sakura/.bash_logout /home/sakura/.gconfd /home/sakura/sakura.txt /home/sakura/.ssh /home/sakura/.bashrc /home/sakura/japan /home/sakura/.rpmmacros /home/sakura/.zshrc /home/sakura/.bash_history /home/sakura/kiku.txt /home/sakura/tsubaki.txt /home/sakura/world /home/sakura/.emacs /home/sakura/.gnome2 /home/sakura/.viminfo /home/sakura/.lesshst /home/sakura/.history /home/sakura/.gconf /home/sakura/.gnome2_private /home/sakura/.bash_profile /home/sakura/.mozilla
/home/sakura (0階層目が表示されている)
find `pwd` -maxdepth 1 -mindepth 1
[sakura@centos ~]$ find `pwd` -maxdepth 1 -mindepth 1 /home/sakura/.bash_logout /home/sakura/.gconfd /home/sakura/sakura.txt /home/sakura/.ssh /home/sakura/.bashrc /home/sakura/japan /home/sakura/.rpmmacros /home/sakura/.zshrc /home/sakura/.bash_history /home/sakura/kiku.txt /home/sakura/tsubaki.txt /home/sakura/world /home/sakura/.emacs /home/sakura/.gnome2 /home/sakura/.viminfo /home/sakura/.lesshst /home/sakura/.history /home/sakura/.gconf /home/sakura/.gnome2_private /home/sakura/.bash_profile /home/sakura/.mozilla
/home/sakura が表示されていない。
grepコマンドを利用して隠しファイルを除外します。
find `pwd` -maxdepth 1 -mindepth 1 | grep -v "\/\."
[sakura@centos ~]$ find `pwd` -maxdepth 1 -mindepth 1 | grep -v "\/\." /home/sakura/sakura.txt /home/sakura/japan /home/sakura/kiku.txt /home/sakura/tsubaki.txt /home/sakura/world
上記のgrepのパターンは/.が含まれる文字列を-vオプションにて対象外にしています。
参考として隠しファイルの除外も動作させてみました。
ファイル構成の環境等によっては期待しない動作になるかもしれませんのgrepを使うときはご注意を。
maxdepthに2を指定して2階層までを対象にする場合。
find `pwd` -maxdepth 2 -mindepth 1 | grep -v "\/\."
[sakura@centos ~]$ ls -l 合計 8 drwxrwxr-x 2 sakura sakura 4096 11月 15 18:20 japan -rw-rw-r-- 1 sakura sakura 0 11月 15 18:21 kiku.txt -rw-rw-r-- 1 sakura sakura 0 11月 15 18:21 sakura.txt -rw-rw-r-- 1 sakura sakura 0 11月 15 18:21 tsubaki.txt drwxrwxr-x 2 sakura sakura 4096 11月 15 18:21 world
[sakura@centos ~]$ find `pwd` -maxdepth 2 -mindepth 1 | grep -v "\/\." /home/sakura/sakura.txt /home/sakura/japan /home/sakura/japan/kyoto.txt /home/sakura/japan/tokyo.txt /home/sakura/kiku.txt /home/sakura/tsubaki.txt /home/sakura/world /home/sakura/world/japan.txt /home/sakura/world/usa.txt /home/sakura/world/china.txt
以下のようなスクリプトにしてもできます。
for F in `ls` do echo `pwd`/$F done
[sakura@centos ~]$ for F in `ls`; do echo `pwd`/$F; done /home/sakurajapan /home/sakurakiku.txt /home/sakurasakura.txt /home/sakuratsubaki.txt /home/sakuraworld