Saya memiliki folder induk bernama "parent_folder" dengan banyak subfolder, dalam subfolder ini adalah file bernama "foo.mp4".
Saya dapat menemukan file-file ini dengan mudah dengan melakukan ini:
mymacbook:parent_folder username$ find ./ -name "foo.mp4" -exec echo {} \;
Sekarang mengembalikan path dari setiap file, relatif ke parent_folder /
./path/to/foo.mp4
Bagaimana saya bisa mengembalikan path saja, tanpa nama file?
-printf
%h
Memimpin direktori nama file (semua kecuali elemen terakhir). Jika nama file tidak mengandung garis miring (karena berada di direktori saat ini)% h specifier diperluas ke "." .find ./ -name "foo.mp4" -printf "%h\n"
akan mencetak jalur ke untuk setiap file yang ditemukan (satu demi satu). Terlebih lagi seperti biasa tidak ada yang menggunakan-exec echo {}
karena itu ada-print
(default bahkan dihilangkan) atauprintf
tindakan.-printf
hanya untuk GNU. OP menyebutkan OS / X (sistem BSD).Jawaban:
Dengan
GNU
menemukan:Dengan yang lain
find
, asalkan nama direktori tidak mengandung karakter baris baru:Atau:
meskipun itu berarti menjalankan satu
dirname
perintah per file.Jika Anda perlu menjalankan perintah itu
path
, Anda bisa melakukannya (sintaks standar):Meskipun dalam hal ini, Anda mungkin dapat menggunakan
-execdir
(ekstensi BSD juga tersedia di GNUfind
), yangchdir()
menuju ke direktori file:Berhati-hatilah meskipun implementasi GNU
find
akan diperluas{}
ke./filename
sini, yang BSD diperluas kefilename
. Tidak apa-apa di sini karena nama file dilewatkan sebagai argumen untuk suatu opsi dan selalufeatured.mp4
tetap, tetapi untuk penggunaan lain Anda mungkin harus mempertimbangkan bahwa nama file dapat dimulai dengan-
atau+
(dan dipahami sebagai opsi oleh perintah) atau mengandung=
(dan dipahami sebagai variabel tugas dengan awk misalnya), atau karakter lain yang menyebabkan masalah seperti ini denganperl -p/n
(tidak semua dari mereka diperbaiki oleh GNUfind
's./
awalan meskipun dalam kasus itu), dll, yang mungkin Anda harus memperhitungkan .sumber
find .
, sebagai dirname Anda akan memiliki. bukannya seluruh jalur.find ./ -name "featured.mp4" -exec ffmpeg -i "{}" -c:v libvpx -b:v 1M -c:a libvorbis [NEED DIRECTORY HERE] featured.webm \;
Saya menggunakan saran kedua yang Anda sebutkan.Perintah di bawah ini juga dapat digunakan untuk mengambil detail direktori saja.
sumber