Saya mencoba untuk ls
dirs yang memiliki .png
file di dalamnya (tidak perlu untuk recursiveness, meskipun itu akan sangat berguna), kecuali satu. Keluarkan satu direktori yaitu
ls */*.png
bekerja dengan baik.
ls (^one)*/*.png
tidak mengembalikan stdout. Bagaimana saya mencapainya?
Saya buta dan menyalurkannya espeak
, jadi saya hanya bisa mendengar stdout untuk saat ini.
one
(pola yang tepat adalah^one/*.png
), itu akan mencetak semuanya.Jawaban:
Opsi 1 - hanya menggunakan
ls
:Dengan bash globbing diperpanjang dinyalakan (
shopt -s extglob
) Anda dapat melakukan:Opsi 2 - menggabungkan
ls
dangrep
:Anda dapat menggabungkan
ls
dengangrep -v
ls */*.png | grep -v "one/"
Opsi 3 - (IMO terbaik) tetapi
find
tidak menggunakanls
:Untuk pencarian rekursif semua subdirektori menggunakan
find
Semua kalimat di atas akan daftar direktori dengan
.png
file sambil menyaring semua jalan yang cocokone/
; hanya Opsi 3 yang akan melakukan ini secara rekursif.sumber
find
perintah itu perlu diucapkan-path "*/one/*"
atau-path "./one/*"
?./phone/handset.png
?.png
di direktori bernamaphone
? Saya pikir kami hanya mencoba untuk mengecualikanone
?-not
, itu berarti menyebabkanfind
untuk mengecualikan file dalam direktori yang disebutphone
.Dalam zsh , menempatkan
setopt extended_glob
di Anda~/.zshrc
. Kemudian Anda dapat menggunakan pola wildcard^one
untuk mengecualikan direktori yang disebutone
.Jika Anda ingin rekursi menjadi subdirektori, gunakan
**/
untuk globbing rekursif. Untuk mengecualikan direktori yang disebutone
di tingkat atas, serta direktori tingkat atas:Untuk mengecualikan file dalam subdirektori yang dipanggil
one
, tetapi tidak file dalam subdirektori itu:Untuk mengecualikan file di bawah subdirektori yang dipanggil
one
di tingkat mana pun, gunakan pola berulang dengan#
operator di sekitar negasi:sumber