loại trừ một số tập tin trong ls


61

Tôi muốn chạy ls và loại trừ các tệp nhất định trong đầu ra.

Khi tôi chạy lệnh sau, tôi nhận được tất cả các tệp với mỗi dòng trên một dòng:

$ ls -1
file1
file2
file3
temp

Tôi muốn chạy lệnh này theo cách để nó hiển thị

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

Câu trả lời:


82
ls -I <filename>

-I = Bỏ qua tên tệp, nghĩa là không liệt kê tệp đã chỉ định.

Để bỏ qua nhiều hơn một tệp, hãy thêm một -I trước mỗi tên tệp.

ls -I file1 -I file2

Để bỏ qua các tập tin bởi phần mở rộng tên của họ làm như sau, ví dụ.

ls -I "*.jpg" -I "*.svg"

4
Nếu bạn sử dụng tùy chọn dài hình thức --ignorebạn có thể mở rộng đến mẫu glob ví dụ ls --ignore="file?"hoặcls --ignore="file*"
steeldriver

3
bạn cũng có thể sử dụng các mẫu toàn cầu với dạng ngắn bằng cách trích dẫn các mẫu
verboze

18

Đối với tôi nếu tôi sử dụng -tôi một lần, nó hoạt động nhưng nếu tôi sử dụng hai lần thì không. vd: ls -I *.csvcông trình.

Nhưng ls -I *.csv -I *.txtkhông hoạt động và trả về các tập tin txt thay thế.

--ignore đã lừa tôi. Đây là những gì tôi cần và làm việc.

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

Điều đó sẽ liệt kê tôi các tập tin từ thư mục nhật ký nơi nó loại trừ các bản ghi dự phòng cũ.


3
trích dẫn * .csv ở dạng đầu tiên hoạt động, vd., ls -I '*.txt'. Lý do nó không hoạt động không được trích dẫn là do mở rộng shell, tức là bạn đang bảo shell liệt kê tất cả các tệp csv thay vì loại trừ chúng. Điều thực sự xảy ra là nó bỏ qua các tệp .csv và .1 đầu tiên sau khi mở rộng, nhưng liệt kê phần còn lại
verboze

Báo giá kép làm việc cho tôi là tốt. Cảm ơn @verboze
dùng38537

cái này dễ hơn Cảm ơn.
Philippe Delteil

6

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


4
Điều này chỉ đơn giản là sử dụng mở rộng cú đúp của bash để có ba --ignoretùy chọn. Bạn cũng có thể đã sử dụng--ignore="*."{jpg,png,svg}
muru

1

Tôi nghĩ rằng điều này tạo ra đầu ra mà bạn đang tìm kiếm:

ls -1 !(temp)

Rõ ràng , bạn cần shopt -s extglobcho nó hoạt động
(tôi đã kích hoạt nó, vì vậy tôi đoán một lúc nào đó trong quá khứ xa tôi thấy nó hữu ích và kích hoạt nó).

Tôi đoán bạn cũng có thể sử dụng grep để lọc đầu ra:

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

Sử dụng một đường ống và bộ lọc cung cấp sự linh hoạt hơn rất nhiều và các kỹ năng có thể chuyển sang các lệnh / tình huống khác, mặc dù bạn có thể không quan tâm đến điều đó cho trường hợp cụ thể này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.