Katakan misalnya saya memiliki file berikut di direktori kerja saya: mjk0001.fits, mjk0002.fits, ... secara numerik meningkatkan semua jalan ke mjk9999.fits.
Apakah ada cara untuk menggunakan wildcard UNIX untuk mendaftar atau beroperasi pada kelompok berurutan dari mereka? Misalnya, jika saya perlu menjalankan proses pada 0025 hingga 0050, format apa yang akan saya gunakan?
Saya sudah mencoba yang berikut tetapi tidak berhasil:
ls *[25-50].fits
ls mjk00[25-50].fits
ls mjk[0025-0050]*
ls *[0025-0050]*
Terima kasih sebelumnya, semuanya, MK
bash
unix
command-line
ls
Matt Keene
sumber
sumber
Jawaban:
Anda dapat menggunakan ekspansi brace:
Nol terkemuka dapat dimasukkan jika perlu:
sumber
{25..50..2}
.Tidak secara langsung, tetapi Anda dapat menggunakan beberapa pola bola:
Ini bukan apa yang Anda cari, tapi ini adalah hal terdekat yang ditawarkan pola glob, dan tentu saja lebih baik daripada mengetik setiap sistem file. Setidaknya jumlah pola yang Anda perlukan per rentang numerik dibatasi oleh log titik akhir numerik dari rentang tersebut.
sumber
Anda bisa menggunakan regex dengan grep. Saya bukan guru regex. Berikut ini mengembalikan pola dengan angka antara 25-50:
Saya tidak tahu apakah itu mungkin dan bagaimana akhirnya menyamaratakan ini dengan grep.
sumber
Dimungkinkan untuk mencapai portabilitas atau fleksibilitas yang lebih besar dengan menggunakan
for
loop danprintf
:Ini menangani ruang dengan baik dan hasilnya cocok untuk perpipaan
xargs
untuk diproses lebih lanjut.Angka dengan banyak kecocokan akan menghasilkan semua file yang cocok terdaftar.
Angka tanpa kecocokan akan melaporkan kesalahan pada stderr, tetapi
||true
menekan kembalinya tingkat bash.Namun dalam kasus dasar, menggunakan
for
danprintf
tidak berbeda dari yang lebih ringkas:sumber
for i in {025..050} ; do ... ; done