Saya menggunakan baris berikut untuk menemukan semua sub-direktori dari PWD dan dijalankan svnadmin verify
pada setiap direktori (saya sudah tahu bahwa itu adalah repositori Subversion)
find ./* -maxdepth 0 -exec svnadmin verify {} \;
Ini berfungsi dengan baik, selain fakta bahwa outputnya terlihat seperti ini:
* Verifying repository metadata ...
* Verifying metadata at revision 1 ...
* Verifying metadata at revision 2 ...
* Verifying metadata at revision 4 ...
* Verifying metadata at revision 5 ...
* Verifying metadata at revision 6 ...
* Verifying metadata at revision 9 ...
* Verifying metadata at revision 10 ...
* Verifying metadata at revision 12 ...
* Verifying metadata at revision 14 ...
* Verifying metadata at revision 15 ...
* Verifying metadata at revision 18 ...
* Verifying metadata at revision 20 ...
* Verifying metadata at revision 22 ...
* Verified revision 0.
* Verified revision 1.
* Verified revision 2.
* Verified revision 3.
* Verified revision 4.
* Verified revision 5.
* Verified revision 6.
* Verified revision 7.
* Verified revision 8.
* Verified revision 9.
* Verified revision 10.
* Verified revision 11.
* Verified revision 12.
* Verified revision 13.
* Verified revision 14.
* Verified revision 15.
* Verified revision 16.
* Verified revision 17.
* Verified revision 18.
* Verified revision 19.
* Verified revision 20.
* Verified revision 21.
* Verified revision 22.
* Verified revision 23.
* Verified revision 0.
* Verifying repository metadata ...
* Verifying metadata at revision 4 ...
* Verifying metadata at revision 5 ...
* Verifying metadata at revision 6 ...
* Verifying metadata at revision 7 ...
* Verifying metadata at revision 9 ...
* Verified revision 0.
* Verified revision 1.
* Verified revision 2.
* Verified revision 3.
* Verified revision 4.
* Verified revision 5.
* Verified revision 6.
* Verified revision 7.
* Verified revision 8.
* Verified revision 9.
Saya benar-benar ingin find
mencetak nama file sebelum mengeksekusi svnadmin verify
perintah, untuk membuat logging lebih mudah.
Saya sudah mencoba memerasnya sedikit ls
di sana tetapi memperbaikinya, bagaimana saya harus melakukan ini (lebih baik sederhana)?
command-line
bash
scripts
find
Arronikal
sumber
sumber
'%p'
ke'%p\n'
sehingga mendahului nama memverifikasi keluaran pada baris itu sendiri.-printf '%p\n'
dengan yang lebih sederhana-print
find -name <a_name> -print -exec command {} \;
Jika Anda tidak ingin berulang, tidak ada gunanya menggunakan
find
. Jauh lebih mudah untuk melakukannya di shell secara langsung:The
for d in */
akan menemukan semua direktori (yang*/
memastikan hanya direktori dan tidak ada file yang ditemukan); yangecho "$d"
akan mencetak nama direktori ini; yangsvnadmin verify "$d"
akan memeriksa direktori.Ini bisa dijalankan langsung dari baris perintah atau dari dalam skrip tanpa perubahan format.
sumber
find
sangat banyak. Terima kasih telah meningkatkan pengetahuan saya!dotglob
danglobstar
dalam bash, yang menciptakan skrip yang lebih panjang, lebih rumit. Saya cenderung menyimpan gumpalan untuk tugas-tugas besar yang rumit, sementarafind
sintaksis lebih mudah untuk dilempar bersama dengan hanya merangkai sekelompok filter dan perintah ke dalam satu-liner.find
sederhana yang lebih sederhana. Saya selalu lebih suka gumpalan daripadafind
karena saya tidak hanya menemukan mereka jauh lebih sederhana tetapi mereka juga lebih aman ketika berhadapan dengan nama file sewenang-wenang yang diteruskan ke program lain.Saya telah menambahkan
-type d
jika hanya direktori.sumber
{}
, setidaknya dalamsvnadmin verify {}
-exec
menelurkan shell anak, di mana 2 perintah dijalankan, menggunakan;
sebagai ujung baris?Coba ini:
Jika Anda hanya ingin direktori (Terima kasih kepada @kos note):
sumber
for f in */
hanya akan memproses direktori. -maxdepth 1
alih-alih./*
, Anda hanya perlu level pertama dalam struktur folder-type d
, Anda hanya perlu folder! -name "."
, Anda tidak perlu.
-exec
untuk memulai shellsh -c
untuk memulai perintah di dalam shellPerintahmu
atau lebih pendek
-prune
jika file tersebut adalah direktori, jangan turun ke dalamnyaPerintahmu
sumber
-prune
terlihat menarik. Saya biasa./* -maxdepth 0
menghindari kembali.
dari perintah find. Itu tidak menyebabkan kesalahan kritis, tapi saya lebih suka tidak memiliki itu di output saya.find
memiliki flag opsi untuk dicetak, yang sudah disebutkan dalam jawaban lain. Jika kita melihat masalah dari perspektif menjalankan beberapa perintah untuk file yang sedang diproses yang sama,find
memungkinkan untuk menggunakan banyak perintah-exec
pernyataan. Ini berarti kami dapat memilih untuk menggunakan:Sekali lagi, perhatikan bahwa pendekatan ini berlaku untuk tidak hanya mencetak dengan
echo
,printf
atau utilitas lain, tetapi juga perintah lain.sumber
Mungkin bermanfaat untuk menyalurkan
find
output keread
loop:Ini memungkinkan Anda untuk mengeksekusi urutan perintah majemuk yang lebih rumit dengan nama file yang dikembalikan oleh
find
, seperti dalamls
contoh mewah ini :sumber
Ini akan mencetak nama dan isi file-hanya secara rekursif ..
sumber