'Find' komutunu kullanarak dosyaların mutlak yolunu alın


26

Aranmakta olan bir dosyanın mutlak yolunu almanın bir yolu var mı?

Örneğin:

find .. -name "filename"

Bana gibi sonuçlar veriyor ../filenameama tam yolu istiyorum.

İhtiyacım olan, daha sonra başka bir komut dosyasında kullanacağım belirli bir dosya için üst dizinde ve altlarında bulmak.

Teşekkürler


Yanıtlar:


15

Gibi bir şey deneyin:

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

Teşekkürler, sadece test ediyordum $(cd ..; pwd). İşte Tamam çalışıyor, ancak eğer bir Terminalde yalnız yaparsam, ana dir elde edemiyorum ... "Bash: <dir>: Bir dizin var. Ve eğer $(cd ..; echo "something")alırsam" bir şey: komut "
JorgeeFG

Ayrı bir komut gibi mi demek istiyorsun? Öyleyse dolar işaretini bırakmanız gerekir:(cd ..; pwd)
Scrutinizer

Teşekkürler, öyleydi. $ 'I neden kaldırmam gerektiğine dair herhangi bir referans, alt kabuğu nasıl etkiler?
JorgeeFG

1
Evet ( ... ), alt kabukta çalıştırma anlamına gelir, çıktı stdout'a yazılır. $( ... )"komut değiştirme" anlamına gelir. İkincisi, değişken bir genişlemeymiş gibi kullanılabilir.
Scrutinizer

bulmak / -adı "dosyaadı"
Panther

12

-execSeçeneğini kullanmayı deneyin find:

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

Not: readlinksembolik bir bağlantının veya kanonik dosya adının değerini yazdırır.


bu, her dosya için readlink'i çağırır, böylece çok etkisiz olur.
bac0n

9

Sen kullanabilirsiniz bashbulunulan dizinin mutlak yolunu almak için 'ın Tilde Genişletme, bu şekilde findde sonuç için mutlak yolunu yazdırır:

find ~+ -type f -name "filename"

Eğer yürütülürse ~/Desktop, bu

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

ve aşağıdaki gibi sonuçları yazdırır:

/home/yourusername/Desktop/filename

Geçerli çalışma dizinin bu yaklaşımı kullanmak istiyorsanız ebeveyn yapmanız gerekir dizine cdçağırmadan önce find:

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

7

En basit yol

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

Evet! Veyafind `pwd -P` -name "filename"
Apollys, Monica

bu, geçerli dizindeki dosyaları üst öğeden değil bulur.
bac0n

1

Ayrıca PWD kullanarak size tam dizini gösterebilir. Pwd, bulunduğunuz tüm direktörlerinize dosya isminin genişlemesi gibi gösterecektir. Umarım bu yardımcı oldu.


1

Bu benim için çalıştı, ancak yalnızca ilk oluşumunu döndürür.

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

Tüm olaylar için tam yollar elde etmek (Sergiy Kolodyazhnyy tarafından önerildiği gibi)

find . -type f -name filename | xargs realpath

Önceki yorum kaldırıldı, +1, iyi iş @Wyrmwood
Sergiy Kolodyazhnyy

1

Genişletme parametresiyle son dizin bileşenini kaldırma .

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

Daha sonra kullanmak üzere çıktıyı bulmak için dizine eklenmiş bir diziye kaydetmek için mapfile işlevini nasıl kullanabileceğinize bir örnek .

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

(dizi adı belirtilmezse, MAPFILE varsayılan dizi adı olur).

for i in "${MAPFILE[@]}"; do
    echo "$((n++)) $i"
done
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.