Mungkin terdengar seperti saya menanyakan hal yang sama dengan pertanyaan ini , tetapi saya memiliki persyaratan yang berbeda. Ini adalah contoh dari sistem file saya:
- /kode/
- intern/
- dev /
- utama/
- publik/
- dev /
- utama/
- melepaskan/
- alat /
- intern/
/code/internal/dev/
, /code/public/dev/
dan /code/tools/
berisi subdirektori untuk banyak proyek. Saya bekerja hampir secara eksklusif di cabang dev /code/internal/
dan /code/public/
, dan sering saya ingin mencari string teks di direktori tersebut bersama /code/tools/
(yang tidak memiliki cabang). Dalam hal ini saya harus melakukan tiga perintah terpisah:
$ grep -r "some string" /code/internal/dev/
$ grep -r "some string" /code/public/dev/
$ grep -r "some string" /code/tools/
Saya ingin tahu apakah ada satu perintah untuk melakukan ini. Jika tidak, kemungkinan besar saya perlu menulis skrip bash sederhana.
grep: /code/internal/dev/*.cs: No such file or directory
kecuali saya menghapus*.cs
dari perintah. Ini salah saya karena saya memasukkan*.cs
pertanyaan saya pada awalnya.Jika Anda ingin menggunakan wildcard secara maksimal (dan hierarki yang Anda poskan selesai), Anda bisa melakukannya
Penjelasan:
Langkah pertama yang dilakukan adalah perluasan daftar brace.
foo{bar,baz}qux
meluas kefoobarqux foobazqux
. Artinya, ada kata terpisah yang dihasilkan untuk setiap item yang dipisahkan koma dalam daftar, dengan bagian awalan dan postfix yang melekat pada masing-masing. Anda dapat melihat cara kerjanya dengan melakukanoutput yang mana
Perhatikan bahwa ini juga berfungsi dengan beberapa kawat gigi, dan juga dengan argumen kosong; sebagai contoh
memberi
Jadi setelah penjepit ekspansi, perintah Anda terlihat seperti ini:
Langkah selanjutnya adalah ekspansi wildcard. Anda sudah tahu itu untuk
*.cs
sebagian, tetapi juga berfungsi untuk direktori perantara; apalagi, jika/
diikuti, hanya direktori yang cocok. Karenanya dengan memberikan hierarki Anda (dan membuat nama file untuk.cs
file), Anda akan mendapatkan perintah:Hanya setelah semua ini terjadi,
grep
dipanggil dengan daftar argumen ini (perhatikan bahwa hal yang sama terjadi dengan perintah asli Anda;grep
jangan pernah melihat*
; perluasan yang sepenuhnya dilakukan denganbash
sebelum memanggilgrep
).sumber