GNU ls (tức là lệnh ls trên các hệ thống Linux không nhúng và Cygwin, cũng có sẵn trên một số thông báo khác) có một tùy chọn để ẩn một số tệp, dựa trên tên của chúng. Không có cách nào để bỏ qua các thư mục mặc dù.
ls --hide='t_*' uploads
Một cách tiếp cận khác là làm cho vỏ của bạn làm khớp. Bash, ksh và zsh có mẫu phủ định !(t_*)
để khớp với tất cả các tệp ngoại trừ các tệp khớp t*
; trong bash, tính năng này cần được bật shopt -s extglob
và trong zsh, nó cần được bật setopt ksh_glob
. Zsh cũng có cú pháp tương đương ^t_*
cần được bật setopt extended_glob
. Điều này vẫn không bỏ qua các thư mục. Zsh có một tính năng bổ sung cho phép khớp các tệp không chỉ theo tên mà còn theo siêu dữ liệu và hơn thế nữa: vòng loại toàn cầu . Thêm (.)
vào cuối của một trận đấu để hạn chế các tập tin thông thường. Việc phủ định ^
là một phần của cú pháp khớp tên, do đó, ^t_*(.)
có nghĩa là tất cả các tệp thông thường không khớp với t_*
và không phải tất cả các tệp không khớp với các tệp thông thường t_*
.
setopt extended_glob # put this in your ~/.zshrc
ls uploads/^t_*(.)
Nếu bạn thấy mình không có các công cụ nâng cao, bạn có thể thực hiện việc này trên bất kỳ unix nào với find
. Đây không phải là thứ bạn thường gõ trên dòng lệnh, nhưng nó mạnh mẽ và chính xác. Caleb đã chỉ ra cách thực hiện điều này với GNU find . Các -maxdepth
tùy chọn là không cầm tay; -prune
thay vào đó, bạn có thể sử dụng để dừng find
đệ quy.
find uploads/* -type d -prune -o \! -type f -name 't_*' -print
Thay thế -print
bằng -exec ls -lG -- {} +
để thực hiện ls
với các tùy chọn yêu thích của bạn trên các tập tin.
Tất cả các lệnh trên đều ẩn các tệp chấm (tức là các tệp có tên bắt đầu bằng a .
). Nếu bạn muốn hiển thị chúng, chuyển -A
đến ls
hoặc thêm D
vòng loại toàn cầu trong zsh ( ls uploads/^t_*(.D)
). Với find
, bạn có thể sử dụng một cách tiếp cận khác để làm cho nó chỉ lặp lại một cấp độ ( find
không xử lý các tệp chấm đặc biệt). Điều này chỉ hoạt động đầy đủ nếu bạn chạy find
trong thư mục hiện tại.
cd uploads && find . -name . -o -type d -prune -o \! -type f -name 't_*' -print