このエントリーをはてなブックマークに追加


ファイルのフルパス名を取得する方法・find

普通に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を使ったひとつの例を記述します。

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 を実行(-mindepth 1を指定しない)

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 を実行

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を使うときはご注意を。

2階層まで対象としてみる

maxdepthに2を指定して2階層までを対象にする場合。

find `pwd` -maxdepth 2 -mindepth 1 | grep -v "\/\."
  • 対象ファイルをls -lにて表示し確認
    [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
  • maxdepthに2を指定して2階層までを対象にし実行した結果。 japan, 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

関連資料



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-12-07 (土) 20:48:35