Linuxで「find」コマンドを使用して見つかったファイルの絶対パスを取得するには?

Linuxで「find」コマンドを使用して見つかったファイルの絶対パスを取得するには?

ファイルが存在することを確認しています。findコマンドは次のとおりです。

find ${pwd} | grep 'Test.*zip'

このコマンドは相対パスとともに出力を返します。例:

./ReleaseKit/Installable/Test-5.2.0.11.zip

findコマンドを使用して見つかったファイルの絶対パスを取得する方法はありますか?

答え1

あなたの問題

    find ${pwd} | grep 'Test.*zip'

という変数がないということですpwd。だからこれは同じですfind | grep 'Test.*zip'。現在のディレクトリを開始点として使用しようとしています。

プログラムを実行するには、または$(pwd)代わりに$PWD別のPOSIXシェルによって維持される変数を使用して現在のディレクトリを指定します${pwd}。すべてのシェルがPOSIXであるわけではありません。また、ディレクトリパスに奇妙な文字が表示されないように、変数やコマンドの置き換えを引用する必要があります。$(pwd)pwd$PWDbash

    find "$PWD" | grep 'Test.*zip'

答え2

はい、しかし、文にはより多くのパラメータ(パス+ファイル+アクション)が必要な場合があります。おそらく、次のようにコマンドを設定する場合です。

$> find {path} -iname {file} -exec {action} \;

使用リンクを読む絶対パスを取得するコマンド (Linux および OS/X)

前任者。

$> find ./www/project/ -iname 'Test*.zip' -exec readlink -f {} \;
/opt/www/project/Test-5.2.0.11.zip
/opt/www/project/Test-5.2.0.13.zip

答え3

報告されたパス名は、find常にそのパスが見つかった最上位の検索パスで始まります。したがって、絶対パスを検索パスとして使用します。

find "$PWD" -name 'Test*zip'

このPWD変数は現在のディレクトリの絶対パス名を保持します。

検索パスが指定されていない場合、GNU はデフォルトfindで現在のディレクトリ.(「ドット」)を検索パスとして使用します。これはという変数がないため、あなたの場合に発生しますpwd。これはfind、チェックされたすべてのパス名がドットで始まることを意味します。他のほとんどの実装では、検索パスが指定されていないとエラーが発生します。

$ unset pwd
$ find $pwd
usage: find [-dHhLXx] [-f path] path ... [expression]

関連情報