Saya memiliki direktori di mana banyak file (sekitar 200) dengan nama temp_log.$$
dibuat dengan beberapa file penting lainnya yang perlu saya periksa.
Bagaimana saya bisa dengan mudah mendaftar semua file dan mengecualikan temp_log.$$
file agar tidak ditampilkan?
Output yang diharapkan
$ ls -lrt <exclude-filename-part>
-- Lists files not matching the above given string
Saya telah membaca ls
halaman manual tetapi tidak dapat menemukan apapun dalam referensi ini. Tolong beri tahu saya jika saya melewatkan informasi penting di sini.
Terima kasih
ls --hide='temp_log.$$'
seharusnya bekerja. Anda juga bisa / harus memperpanjang ini dengan wildcard, tergantung bagian mana dari keseluruhan istilahtemp_log.$$
ini.Jawaban:
Dengan GNU
ls
(versi tentang Linux dan Cygwin yang tidak tertanam, terkadang juga ditemukan di tempat lain), Anda dapat mengecualikan beberapa file saat mendaftar direktori.(perhatikan bentuk panjang
-I
is--ignore='temp_log.*'
)Dengan zsh, Anda dapat membiarkan shell melakukan penyaringan. Lewati
-d
untukls
menghindari daftar isi direktori yang cocok.Dengan ksh, bash atau zsh, Anda dapat menggunakan sintaks filter ksh. Di zsh, jalankan
setopt ksh_glob
dulu. Di bash, jalankanshopt -s extglob
dulu.sumber
-Itemp_log.*
tanpa ruang setelah-I
-I
. Namun,*
perlu dikutip satu atau lain cara.-I temp_log.*
tidak bekerja tetapi-I 'temp_log.*'
,-I "temp_log.*"
,-I temp_log.\*
, dll baik-baik saja.Anda dapat menggunakan
grep
opsi ini-v
.sumber
Anda dapat menggunakan
find
ini:Ini hanya akan mencetak nama, Anda dapat menambahkan
-ls
untuk membuatls -l
keluaran gaya dengan stempel waktu dan izin, atau gunakan-exec ls {} +
untuk benar-benar beralih ke ls dengan opsi apa pun yang Anda inginkan untuk kolom, pengurutan, dll.Saya menulis ini dengan asumsi ini hanya file dalam direktori. Jika direktori tersebut berisi direktori lain, Anda mungkin ingin menghindari mendaftarkannya secara rekursif
Dan jika Anda menggunakan ls Anda akan ingin memberikan opsi -d untuk menghentikan itu dari daftar dalam direktori:
-exec ls -d {} +
sumber
-maxdepth 1
meniru non-rekursifls
.find
tanpa-maxdepth
harus melihat di sini .Saya pikir Anda ingin menggunakan fitur shell, bukan
ls
. Saya menggunakan bash, jadi saya memeriksa apa yang Anda inginkanman bash
. Cari "^ EXPANSION", (dengan terlebih dahulu menekan '/'). Kutipan:Saya baru-baru ini mulai mengecualikan file berdasarkan huruf pertama mereka, dengan perintah seperti:
Ini akan cocok dengan apa pun yang tidak dimulai dengan surat itu
t
. Jika Anda menambahkan lebih banyak karakter di antara tanda kurung, maka Anda mengecualikan file yang dimulai dengan huruf-huruf itu juga.Mencari tautan, dan saya punya yang bagus! Lihat Pencocokan Pola . Dari sana, ini akan berfungsi untuk kasus Anda:
Ini mengharuskan
extglob
opsi shell diaktifkan menggunakanshopt
builtin (shopt -s extglob
), seperti yang dinyatakan oleh Gilles .sumber
Lakukan saja
sumber
grep
mencari pola di dalam file, bukan di nama file.Karena file yang Anda TIDAK ingin cetak memiliki "temp_log." di nama file, lalu saring dengan grep:
CATATAN: Posting lain dengan jawaban yang mirip mungkin diturunkan karena pengguna tidak menyertakan tanda kutip "" di sekitar string yang harus dicari grep. Tanpa tanda kutip, itu tidak berfungsi seperti yang diiklankan.
sumber
temp_log
. Ini bukan cara (umum) yang bagus untuk mengecualikanls
hasil.-F
, @ smokes2345; suatu periode akan cocok dengan karakter apa pun dalam ekspresi reguler dasar. Lihat: unix.stackexchange.com/q/119905/117549