Pertanyaan Mengapa tidak 'menemukan' memangkas menurut cara saya seharusnya?


Saya menjalankan MacOSX 10.5.8

Saya menjalankan yang berikut:

~/Sites/jjprof/trunk/content > find . -type d -name '*svn' -prune
./.svn
./resources/.svn
./resources/sitewide/.svn
./temporary/.svn
./users/.svn
./users/avatars/.svn

Saya mengharapkan perintah ini untuk mengabaikan semua subdirektori .svn; melainkan menampilkannya.

find . -name '*svn' -prune 

melakukan hal yang sama.


2
2017-11-04 11:56


asal




Jawaban:


Coba ini:

find -type d -path '.svn' -prune -o -print

Dari man find di bawah bagian -name:

Untuk mengabaikan direktori dan file di bawahnya, gunakan -prune; lihat contoh dalam deskripsi
-path.

Di bawah bagian di -path:

Untuk mengabaikan seluruh pohon direktori, gunakan -prune agak                 daripada memeriksa setiap file di pohon. Misalnya, untuk melewati                 direktori src/emacs  dan semua file dan direktori di bawahnya,                 dan cetak nama file lain yang ditemukan, lakukan sesuatu seperti                 ini:

             find . -path ./src/emacs -prune -o -print

Dari bagian "Contoh":

Namun, itu -prune aksi itu sendiri mengembalikan true, jadi          berikut -o memastikan bahwa sisi kanan dievaluasi hanya untuk          direktori-direktori yang tidak dipangkas (isi dari yang dipangkas          direktori bahkan tidak dikunjungi, jadi isinya tidak relevan).


4
2017-11-04 15:31



Ini memang cara yang benar untuk digunakan -prune, dan penjelasan yang bagus. Namun, -name .svn adalah cara yang tepat untuk memilih .svn subdirektori (-name '*svn' or -Pet '* svn'` akan mencocokkan file tambahan). - Gilles
Ini sebenarnya tidak bekerja. Anda perlu menggunakan '*/.svn' sebagai nama jalan; jika tidak, itu tidak akan cocok ./.svn, ./subdir/svn, Dan seterusnya. - Brooks Moses


menemukan manual menyatakan tha prune "mengabaikan jalur sebelumnya ..." jadi perintah seharusnya

find . -prune -type d -name '*svn'

Ini karena Anda dapat memiliki sesuatu seperti itu

find -path . -name '*svn' -o -path './notimportantdir' -prune

yang menemukan '* svn' di jalan saat ini kecuali mereka yang di bawah notimportantdir


2
2017-11-04 12:07