Saya mencoba untuk mendapatkan daftar direktori yang terkandung dalam folder tertentu.
Diberikan folder contoh ini:
foo/bar/test
foo/bar/test/css
foo/bar/wp-content/plugins/XYZ
foo/bar/wp-content/plugins/XYZ/js
foo/bar/wp-content/plugins/XYZ/css
baz/wp-content/plugins/ABC
baz/wp-content/plugins/ABC/inc
baz/wp-content/plugins/ABC/inc/lib
baz/wp-content/plugins/DEF
bat/bar/foo/blog/wp-content/plugins/GHI
Saya ingin perintah yang akan kembali:
XYZ
ABC
DEF
GHI
Pada dasarnya, saya mencari folder yang ada di dalam wp-content / plugins /
Menggunakan find
telah membuat saya paling dekat, tetapi saya tidak dapat menggunakan -maxdepth
, karena folder itu sangat jauh dari tempat saya mencari.
Menjalankan berikut ini mengembalikan semua direktori anak, secara rekursif.
find -type d -path *wp-content/plugins/*
foo/bar/wp-content/plugins/XYZ
foo/bar/wp-content/plugins/XYZ/js
foo/bar/wp-content/plugins/XYZ/css
baz/wp-content/plugins/ABC
baz/wp-content/plugins/ABC/inc
baz/wp-content/plugins/ABC/inc/lib
baz/wp-content/plugins/DEF
bat/bar/foo/blog/wp-content/plugins/GHI
?
. Untuk bash, (seperti yang ditandai pada pertanyaan) ini berfungsi .find
implementasi yang menghasilkan?
karakter pengganti atau apa pun atau segala bentuk pelarian untuk karakter yang tidak dapat dicetak hanya melakukan hal itu ketika output pergi ke terminal, bukan ketika pergi ke pipa seperti di sini.sed
/awk
bahwa semua file berada pada satu baris. Sekarang, Seseorang mungkin berpendapat bahwa mendapatkanABC?BCD
atauABC\nBCD
untuk output interaktif / terminal akan lebih berguna daripada mendapatkan duaABC
danBCD
baris untuk dir disebut$'ABC\nBCD
. Itu pada tingkat presentasi pengguna, kami juga dapat menunjukkan bahwa untuk file bernama$'AB\bC'
, ketika output masuk ke terminal, Anda akan melihatAC
tanpa?
penggantian seperti itu ...Bash-ically:
cetakan:
atau
cetakan:
sumber
Anda bisa memiliki
find
pengulangan, semacam:sumber
Untuk Bash: Sederhana (berfungsi untuk file / dir dengan spasi dan baris baru ):
Akan dicetak:
Bahkan jika ada file yang dibuat.
sumber
dotglob
opsi jika itu tidak diinginkan) dan menyertakan symlink ke direktori selain direktori (**
juga akan melintasi symlink di bash 4.2 dan sebelumnya).find
tidak mengecualikan file apa pun. gumpalan tidak termasuk file dot, ada baiknya menunjukkan sebagai perbedaan antara keduanya.The
tree
perintah dirancang tepat untuk tujuan ini. Kedalaman dapat dikontrol dengan-L
bendera. Berikut adalah contoh di situs Wordpress lokal yang saya kelola:sumber
Membangun dari jawaban DopeGhoti, bagaimana dengan lingkaran pencocokan:
Alasan untuk melakukannya dengan cara ini adalah bahwa Anda mungkin merasa membingungkan / rumit dengan banyak
-exec
, sementara masih menghindari masalah dengan nama file aneh yang mengandung \ n '', dll. -Print0 akan menggunakan pemisah nol antara hasil.sumber
Membangun apa yang Anda mulai:
egrep meraih * wp-content / plugins / * dan setiap karakter hingga $ / akhir baris berikutnya - yang termasuk bagian yang Anda inginkan.
sed , dengan ~ pembatas, memilih bagian yang Anda inginkan menggunakan set kurung pertama () dan menggunakan \ 1 (apa yang Anda inginkan) sebagai pengganti segalanya
uniq memfilter hasil duplikat
sumber