#author("2019-12-07T20:48:21+09:00","","")
#author("2019-12-07T20:48:35+09:00","","")
#navi(../)
* ファイルのフルパス名を取得する方法・find [#r597ae30]
普通に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''コマンドを利用すると便利です。
#br
フルパスを取得したい場合は、''find''コマンドを利用すると便利です。~
&color(red){特定のファイルのフルパスを取得する場合は、''readlink''が便利です。&br;別途記事を公開しているので、以下のリンクで記事を参照してください。};~
[[ファイルのフルパスを取得する・readlink>逆引きUNIXコマンド/ファイルのフルパスを取得する・readlink]]
#br

#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)

* findコマンドでファイルのフルパス名を取得する [#c26018e7]
findコマンドを利用すれば簡単にファイルのフルパス名を取得することができます。~
今回は、findを使ったひとつの例を記述します。
 find `pwd` -maxdepth 1 -mindepth 1
上記のコマンドの意味は pwd コマンドにより、現在のカレントディレクトリを取得し、-maxdepthによりディレクトリ階層を指定しています。~
-mindepth 1は0階層目の表示を抑止します。~
0階層目は、現在のカレントディレクトリになります。
maxdepthの値が1なので、現在のカレントディレクトリにあるディレクトリ内のファイルは対象外になります。
- pwdコマンド : [[逆引きUNIXコマンド/今いるカレントディレクトリを調べる方法]]

* 実行例 [#xc47b579]
ホームディレクトリの状態は以下のようになっています。
 $ 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を指定しない) [#jbbf5cad]
 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 を実行 [#ib1f2cd9]
 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 が表示されていない。

* 隠しファイルを除外する [#r0ef3e38]
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階層まで対象としてみる [#p721cbd8]
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

* スクリプトにして実行(番外編) [#m835a72b]
以下のようなスクリプトにしてもできます。
 for F in `ls`
 do
  echo `pwd`/$F
 done

** スクリプト実行結果 [#ad9579ac]
 [sakura@centos ~]$ for F in `ls`; do echo `pwd`/$F; done
 /home/sakurajapan
 /home/sakurakiku.txt
 /home/sakurasakura.txt
 /home/sakuratsubaki.txt
 /home/sakuraworld

* 関連資料 [#tf184798]
- [[逆引きUNIXコマンド/ディレクトリ文字列を削除しファイル名のみを抽出する方法]] - basenameコマンドを利用
- [[逆引きUNIXコマンド/lsコマンドで取得したパスつきファイル名をファイル名だけ抽出する方法]] - ls, xargs, basenameコマンドを利用


#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS