Bagaimana cara menjalankan perintah di mana file ditemukan?
Pertimbangkan saya memiliki direktori bernama testdir
yang berisi sebagai berikut:
$ ls -R testdir/
testdir/:
dir1 dir2 dir3 dir4 dir5
testdir/dir1:
doc1.pdf
testdir/dir2:
file1.txt
testdir/dir3:
doc2.pdf
testdir/dir4:
file2.txt
testdir/dir5:
doc5.pdf
Sekarang saya ingin melakukan tindakan (mengeksekusi perintah) di mana find
menemukan file/tipe file tertentu. Misalnya biarkan saya menemukan *.pdf
:
$ find . -name '*.pdf'
./testdir/dir3/doc2.pdf
./testdir/dir5/doc5.pdf
./testdir/dir1/doc1.pdf
Sekarang misalkan saya ingin menjalankan perintah (misalnya katakan touch file
) di mana perintah di atas menemukan file(s). Dengan kata lain, saya ingin membuat file bernama file
di setiap direktori di mana setidaknya satu .pdf
ditemukan sehingga saya mendapatkan:
$ ls -R testdir/
testdir/:
dir1 dir2 dir3 dir4 dir5
testdir/dir1:
doc1.pdf file
testdir/dir2:
file1.txt
testdir/dir3:
doc2.pdf file
testdir/dir4:
file2.txt
testdir/dir5:
doc5.pdf file
Bagaimana saya menyelesaikan pekerjaan seperti itu?
Mungkin untuk setiap kali file ditemukan, cd
ke tempat file ada dan melakukan perintah secara rekursif.
Saya tahu bahwa find
memiliki fitur luar biasa:-exec
tapi saya tidak bisa membuatnya bekerja.
Ini hanya contoh untuk mendapatkan ide tentang apa yang ingin saya lakukan. Secara umum:Cara menjalankan perintah di mana file ditemukan (dengan find
) secara rekursif?
Jawaban yang Diterima:
Jika Anda menjalankan perintah ini touch file
akan dijalankan, berpotensi beberapa kali, dari direktori tempat perintah telah dimulai:
find -name '*.pdf' -exec touch file ;
Di sisi lain, jika Anda menjalankan varian ini, setiap contoh perintah akan dijalankan di direktori file target:
find -name '*.pdf' -execdir touch file ;
Dalam kedua kasus, Anda dapat melihat ini beraksi dengan mengganti touch file
dengan salah satu echo {}
dan/atau pwd
.
Dari halaman manual:
-execdir command ;
-execdir command {} +
Suka
-exec
, tetapi perintah yang ditentukan dijalankan dari subdirektori yang berisi file yang cocok, yang biasanya bukan direktori tempat Anda memulaifind
.