Dapatkan path absolut file menggunakan perintah 'temukan'


26

Apakah ada cara untuk mendapatkan path absolut dari file yang sedang dicari?

Sebagai contoh:

find .. -name "filename"

Ini memberi saya hasil seperti ../filenametetapi saya ingin jalur lengkap.

Yang saya butuhkan adalah menemukan di direktori induk dan anak-anaknya, untuk file tertentu, yang akan saya gunakan dalam skrip lain nanti.

Terima kasih


Jawaban:


15

Coba sesuatu seperti:

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

Terima kasih, saya hanya menguji $(cd ..; pwd). Ini berfungsi dengan baik, tetapi jika saya melakukannya sendiri di Terminal, saya tidak bisa mendapatkan dir induk ... saya mendapatkan "Bash: <dir>: Adalah direktori. Dan jika saya lakukan $(cd ..; echo "something")saya mendapatkan" sesuatu: bukan command "
JorgeeFG

Apakah maksud Anda seperti perintah terpisah? Maka Anda harus meninggalkan tanda dolar:(cd ..; pwd)
Scrutinizer

Terima kasih, itu dia. Referensi mengapa saya harus menghapus $, bagaimana hal itu mempengaruhi subkulit?
JorgeeFG

1
Ya ( ... )berarti dijalankan dalam subkulit, output ditulis ke stdout. $( ... )singkatan dari "substitusi perintah". Yang terakhir dapat digunakan seolah-olah itu adalah ekspansi variabel.
Scrutinizer

find / -name "filename"
Panther

12

Coba gunakan -execopsi find:

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

Catatan: readlinkmencetak nilai tautan simbolik atau nama file kanonik.


ini akan memanggil readlink pada setiap file sehingga akan sangat tidak efektif.
bac0n

9

Anda dapat menggunakan bashTilde Expansion untuk mendapatkan jalur absolut dari direktori kerja saat ini, cara ini findmencetak jalur absolut untuk hasil juga:

find ~+ -type f -name "filename"

Jika dieksekusi di ~/Desktop, ini diperluas ke

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

dan mencetak hasil seperti:

/home/yourusername/Desktop/filename

Jika Anda ingin menggunakan pendekatan ini dengan direktori induk direktori kerja saat ini , Anda harus melakukannya cdsebelum menelepon find:

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

7

Cara paling sederhana adalah

find "$(pwd -P)" -name "filename"

Iya nih! Ataufind `pwd -P` -name "filename"
Apollys mendukung Monica

ini akan menemukan file dalam direktori saat ini bukan dari induknya.
bac0n

1

Juga menggunakan PWD dapat menunjukkan kepada Anda direktori lengkap. Pwd akan menunjukkan kepada Anda semua direktori Anda seperti memperluas nama file. Semoga ini bisa membantu.


1

Ini bekerja untuk saya, tetapi hanya akan mengembalikan kejadian pertama.

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

Untuk mendapatkan path lengkap untuk semua kejadian (seperti yang disarankan oleh Sergiy Kolodyazhnyy)

find . -type f -name filename | xargs realpath

Komentar sebelumnya dihapus, +1, kerja bagus @Wyrmwood
Sergiy Kolodyazhnyy

1

Menghapus komponen direktori terakhir dengan Ekspansi parameter .

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

Contoh bagaimana Anda dapat menggunakan mapfile untuk menyimpan output dari find ke array yang diindeks untuk digunakan nanti.

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

(jika tidak ada nama array yang ditentukan, MAPFILE akan menjadi nama array default).

for i in "${MAPFILE[@]}"; do
    echo "$((n++)) $i"
done
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.