GNU/Linux >> Belajar Linux >  >> Linux

Jalankan Perintah Di Mana File Ditemukan?

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 memulai find .


Linux
  1. mkfs.hfsplus:perintah tidak ditemukan

  2. dos2unix:perintah tidak ditemukan

  3. nano:perintah tidak ditemukan

  1. chmod:perintah tidak ditemukan

  2. id:perintah tidak ditemukan

  3. w:perintah tidak ditemukan

  1. mkfs:perintah tidak ditemukan

  2. df:perintah tidak ditemukan

  3. du:perintah tidak ditemukan