「find」コマンドを使用してファイルの絶対パスを取得します


26

検索されているファイルの絶対パスを取得する方法はありますか?

例えば:

find .. -name "filename"

次のような結果../filenameが得られますが、完全なパスが必要です。

必要なのは、後で別のスクリプトで使用する特定のファイルの親ディレクトリとその子を見つけることです。

ありがとう


回答:


15

次のようなものを試してください:

find "$(cd ..; pwd)" -name "filename"

おかげで、私はちょうどテストしていた$(cd ..; pwd)。ここで私が得る...それはOKに動作しますが、私はターミナルで一人でそれを行う場合、私は親ディレクトリを得ることができない「バッシュを<DIR>:ディレクトリがあり、私がしなければ。$(cd ..; echo "something")私が手に」何か:ありませんコマンド」
JorgeeFG

別のコマンドのような意味ですか?次に、ドル記号を除外する必要があります:(cd ..; pwd)
Scrutinizer

おかげで、それだけでした。なぜ$を削除する必要があるのか​​、それがサブシェルにどのように影響するのかについての参照
JorgeeFG 14

1
Yes ( ... )はサブシェルで実行することを意味し、出力はstdoutに書き込まれます。$( ... )「コマンド置換」の略です。後者は、変数展開のように使用できます。
Scrutinizer

find / -name "filename"
パンサー14

12

次の-execオプションを使用してみてくださいfind

find .. -name "filename" -exec readlink -f {} \;

注:readlinkシンボリックリンクまたは正規のファイル名の値を出力します。


これは、すべてのファイルでreadlinkを呼び出すため、非常に効果的ではありません。
bac0n

9

bashのTilde Expansionを使用して現在の作業ディレクトリの絶対パスを取得できます。これによりfind、結果の絶対パスも出力されます。

find ~+ -type f -name "filename"

で実行された場合~/Desktop、これは

find /home/yourusername/Desktop -type f -name "filename"

次のような結果を出力します。

/home/yourusername/Desktop/filename

現在の作業ディレクトリのディレクトリでこのアプローチを使用する場合は、cd呼び出す前に必要がありますfind

cd .. && find ~+ -type f -name "filename"


1

また、PWDを使用すると、完全なディレクトリを表示できます。Pwdは、ファイル名の展開のように、現在のディレクトリをすべて表示します。これが役に立てば幸いです。


1

これは私にとってはうまくいきましたが、最初の発生のみを返します。

realpath $(find . -type f -name filename -print -quit)

すべてのオカレンスのフルパスを取得するには(Sergiy Kolodyazhnyyが提案したとおり)

find . -type f -name filename | xargs realpath

前のコメントを削除、+ 1、良い仕事@Wyrmwood
Sergiy Kolodyazhnyy

1

パラメータExpansion使用して最後のディレクトリコンポーネントを削除します

find "${PWD%/*}" -name 'filename'

mapfileを使用して、findからの出力を後で使用するためにインデックス付き配列に保存する方法の例。

mapfile -t -d '' < <(find ${PWD%/*} -name 'filename' -print0)

(配列名が指定されていない場合、MAPFILEがデフォルトの配列名になります)。

for i in "${MAPFILE[@]}"; do
    echo "$((n++)) $i"
done
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.