kecualikan file tertentu di ls

61

Saya ingin menjalankan ls dan mengecualikan file tertentu dalam output.

Ketika saya menjalankan perintah berikut, saya mendapatkan semua file dengan masing-masing pada satu baris:

$ ls -1
file1
file2
file3
temp

Saya ingin menjalankan perintah ini dengan cara yang ditampilkan

$ ls -1 <insert magic here> temp
file1
file2
file3
Alice Ryhl
sumber

Jawaban:

82
ls -I <filename>

-I = Abaikan nama file, yaitu, jangan daftar file yang ditentukan.

Untuk mengabaikan lebih dari satu file, tambahkan -I sebelum setiap nama file.

ls -I file1 -I file2

Untuk mengabaikan file dengan ekstensi namanya, lakukan hal berikut, misalnya.

ls -I "*.jpg" -I "*.svg"
Sudheer
sumber
4
Jika Anda menggunakan opsi long-form, --ignoreAnda dapat memperluasnya ke pola glob, misalnya ls --ignore="file?"atauls --ignore="file*"
steeldriver
3
Anda dapat menggunakan pola glob dengan bentuk pendek juga dengan mengutip polanya
verboze
18

Bagi saya jika saya menggunakan -Sekali, itu berfungsi tetapi jika saya menggunakan dua kali tidak. misalnya: ls -I *.csvbekerja.

Tetapi ls -I *.csv -I *.txttidak berfungsi dan mengembalikan file txt sebagai gantinya.

--ignore melakukan trik untukku. Inilah yang saya butuhkan dan kerjakan.

ls -lhrt --ignore="*.gz" --ignore="*.1"

Itu akan mencantumkan saya file dari folder log di mana tidak termasuk log cadangan lama.

Damodar Bashyal
sumber
3
mengutip * .csv pada form pertama berfungsi, mis., ls -I '*.txt'. Alasannya tidak bekerja tanpa tanda kutip adalah karena ekspansi shell, yaitu Anda memberi tahu shell untuk mendaftar semua file csv alih-alih mengecualikannya. Apa yang sebenarnya terjadi adalah bahwa ia mengabaikan file .csv dan .1 pertama setelah ekspansi, tetapi daftar sisanya
verboze
Kutipan ganda juga bermanfaat bagi saya. Terima kasih @verboze
user38537
ini lebih mudah. Terima kasih.
Philippe Delteil
6

ls --ignore={"*.jpg","*.png","*.svg"}

Kartikey Tanna
sumber
4
Ini hanya menggunakan ekspansi brace bash untuk mendapatkan tiga --ignoreopsi. Anda juga bisa menggunakan--ignore="*."{jpg,png,svg}
muru
1

Saya pikir ini menghasilkan output yang Anda cari:

ls -1 !(temp)

Rupanya , Anda perlu shopt -s extglobuntuk itu berfungsi
(saya sudah mengaktifkannya, jadi saya kira beberapa waktu di masa lalu saya merasa berguna dan mengaktifkannya).

Saya kira Anda juga bisa menggunakan grep untuk memfilter output:

ls -1 | grep -v '^temp$'

Menggunakan pipa dan filter memberikan lebih banyak fleksibilitas, dan keterampilan yang dapat ditransfer ke perintah / situasi lain, meskipun Anda mungkin tidak tertarik pada hal itu untuk kasus khusus ini.

Max Waterman
sumber