回答:
あなたが与える場合find
に開始するための絶対パスを、それは絶対パスを出力します。たとえば、現在のディレクトリにあるすべての.htaccessファイルを見つけるには、次のようにします。
find "$(pwd)" -name .htaccess
または、シェル$PWD
が現在のディレクトリに展開される場合:
find "$PWD" -name .htaccess
find
与えられたパスを、そのパスからのファイルへの相対パスに付加するだけです。
Greg Hewgillさんpwd -P
は、現在のディレクトリのシンボリックリンクを解決したい場合に使用することも提案しました。
pwd -P
。
ls -d -1 $PWD/**/*
が、私は推測find $PWD
も(bashでテストした)作品
find $PWD
簡単です。ls
呪文は(あなたがそれをエイリアスしない限り)、複雑で扱いにくいです。find
シェルグロブ展開に依存しないため、どのシェルでも機能します。find
また、はるかに柔軟です。すべてのファイル、またはおそらくすべてのディレクトリの再帰的なリストを取得できます。または、すべてのxmlファイルのリスト、または先週変更されたすべてのファイルのリストが必要な場合もあります。でそれが可能ですがfind
、では簡単にはできませんls
。
find "`pwd`" -name .htaccess
ディレクトリ名にスペースが含まれていたため、使用しなければなりませんでした
readlink -f filename
完全な絶対パスを指定します。しかし、ファイルがシンボリックリンクの場合、最終的に解決された名前が取得されます。
realpath
代わりに使用してください
brew install coreutils
、その実行可能ファイルは、としてインストールされます/usr/local/opt/coreutils/libexec/gnubin/readlink
これをdirsに使用します(bashではこれをディレクトリに制限するために/
後**
が必要です):
ls -d -1 "$PWD/"**/
これは、現在のディレクトリの直下にあるファイルおよびディレクトリで、名前に.
:
ls -d -1 "$PWD/"*.*
これはすべて:
ls -d -1 "$PWD/"**/*
ここから取得 http://www.zsh.org/mla/users/2002/msg00033.html
bashでは、**
を有効にすると再帰的ですshopt -s globstar
。
使用できます
find $PWD
バッシュで
これ$PWD
は上記のマシューによる良い選択です。印刷ファイルのみを検索する場合は、-type fオプションを追加して、通常のファイルのみを検索することもできます。他のオプションは、ディレクトリのみの場合は「d」などです。したがって、あなたの場合はそうです(.c拡張子を持つファイルのみを検索したい場合):
find $PWD -type f -name "*.c"
または、すべてのファイルが必要な場合:
find $PWD -type f
注:上記のコマンドのエイリアスは作成できません。$ PWDは、bashによってエイリアスが設定されているときにホームディレクトリにオートコンプリートされるためです。
findコマンドに絶対パスを指定すると、絶対パスで結果が出力されます。したがって、次のように入力した場合、Kenディレクトリから:
find /home/ken/foo/ -name bar -print
(相対パスの代わりにfind . -name bar -print
)
あなたは得るべきです:
/home/ken/foo/bar
したがって、an ls -l
が必要で絶対パスを返すようにしたい場合は、findコマンドに、見つかったものに対してを実行するよう指示するだけls -l
です。
find /home/ken/foo -name bar -exec ls -l {} ;\
注:{}
との間にはスペースがあります;
あなたはこのようなものを得るでしょう:
-rw-r--r-- 1 ken admin 181 Jan 27 15:49 /home/ken/foo/bar
ファイルの場所がわからない場合は、いつでも検索場所を変更できます。検索パスが「/」で始まる限り、代わりに絶対パスを取得します。多くのアクセス許可拒否エラーが発生する場所(/など)を検索している場合は、検索結果を実際に確認できるように、標準エラーをリダイレクトすることをお勧めします。
find / -name bar -exec ls -l {} ;\ 2> /dev/null
(2>
はBorneシェルとBashシェルの構文ですが、Cシェルでは機能しません。他のシェルでも機能する可能性がありますが、確実にBourneとBashで機能することを知っています)。
ls
プロセスに複数の引数を渡すことができ-exec ls -ld {} +
ます。(おそらく、ディレクトリの内容-d
をls
リストにしたくないでしょう)。以上、使用検索が組み込まれていますls
とfind ... name bar -ls
。また、コマンドごとに1つの引数の構文が間違っています{} \;
。シェルからセミコロンを引用符で囲む必要があるためです。
の代わりに
ls -d "$PWD/"*
*
シェル展開であることを特定するには、
echo "$PWD/"*
同じことを行います(-1
スペースではなく改行で区切るために使用できない欠点)。
-1
行ごとに分離する方法
これでうまくいきました。しかし、アルファベット順ではありませんでした。
find "$(pwd)" -maxdepth 1
このコマンドは、アルファベット順にリストするだけでなく、隠しファイルもリストします。
ls -d -1 "$PWD/".*; ls -d -1 "$PWD/"*;
find /home/ken/foo/bar -exec ls -ld $PWD/{} \;