Isi dari dir saya adalah
$ ls -lrt
total 0
-rw-r--r-- 1 user1 admin 19 Oct 8 12:31 night.txt
-rw-r--r-- 1 user1 admin 19 Oct 8 12:31 noon.txt
-rw-r--r-- 1 user1 admin 38 Oct 8 12:31 day.txt
Saya ingin daftar rincian file yang memiliki kata dalam nama file seperti yang ditentukan.
Contoh:
$ ls -lrt *day|night*
ls: *day: No such file or directory
bash: night.txt: command not found
Output yang diharapkan
-rw-r--r-- 1 user1 admin 19 Oct 8 12:31 night.txt
-rw-r--r-- 1 user1 admin 38 Oct 8 12:31 day.txt
Cara daftar file yang berbeda cocok dengan 2 partterns berbeda, atau singkatnya cara menggunakan regex dengan ls
, sehingga saya bisa OR
bagian nama file.
Skenarion asli, ada banyak file di direktori, telah mempersingkat kasus untuk bertanya.
touch day.txt; touch night.txt; ls {*day,night*}
hasil dalamls: *day: No such file or directory
*{day,night}*
lebih dekat dengan apa yang diinginkan OP.Tidak ada opsi
ls
untuk memfilter pada nama file tetapi di sebagian besar shell ada ekstensi globbingman bash
/Pattern Matching
ksh
zsh
atau:
pesta
Dalam salah satu dari tiga shell ini Anda dapat melakukan ini, tetapi perhatikan bahwa jika salah satu case tidak cocok dengan file apa pun, pola itu akan dibiarkan tidak diperluas (mis.
*day* night1.txt othernight.txt
Jika tidak ada nama file yang mengandungday
; lihatman bash
/EXPANSION
atau/Brace Expansion
secara khusus):Dalam setiap kerang yang dapat Anda lakukan:
Di zsh, jika tidak ada
day
ataunight
file, dua perintah terakhir akan gagal; atur opsinonomatch
ataucsh_null_glob
, atau tambahkan(N)
setelah setiap pola untuk menghindari ini.sumber
*{day,night}*
. Saya akan mengeditnya, tetapi saya tidak tahu cangkang mana yang mendukungnya?bash
,,ksh
danzsh
(tidak perlu diperpanjang globbing), tetapi tidaksh
- namun, contoh terakhir "semua kerang" Nahuel bekerja dish
.Shells tidak menggunakan ekspresi reguler untuk ekspansi argumen.
Anda dapat mengaktifkan pencocokan pola yang diperluas dengan
lalu
Lihat misalnya Manual Referensi Bash (Pencocokan Pola)
sumber