Nếu bạn muốn xóa tất cả các tệp có tên khớp với một dạng cụ thể, ký tự đại diện (mẫu hình cầu) là giải pháp đơn giản nhất. Vài ví dụ:
$ rm -f abc.log.* # Remove them all
$ rm -f abc.log.2012* # Remove all logs from 2012
$ rm -f abc.log.2012-0[123]* # Remove all files from the first quarter of 2012
Biểu thức chính quy mạnh hơn ký tự đại diện; bạn có thể cấp dữ liệu đầu ra grep
cho rm -f
. Ví dụ: nếu một số tên tệp bắt đầu bằng "abc.log"
và một số tên bằng "ABC.log"
, grep
cho phép bạn thực hiện đối sánh không phân biệt chữ hoa chữ thường:
$ rm -f $(ls | grep -i '^abc\.log\.')
Điều này sẽ gây ra vấn đề nếu bất kỳ tên tệp nào chứa các ký tự vui nhộn, bao gồm cả dấu cách. Hãy cẩn thận.
Khi tôi làm điều này, tôi chạy ls | grep ...
lệnh trước và kiểm tra xem nó có tạo ra kết quả mà tôi muốn - đặc biệt nếu tôi đang sử dụng rm -f
:
$ ls | grep -i '^abc\.log\.'
(check that the list is correct)
$ rm -f $(!!)
nơi !!
mở rộng đến lệnh trước đó. Hoặc tôi có thể gõ mũi tên lên hoặc Ctrl-P và chỉnh sửa dòng trước đó để thêm rm -f
lệnh.
Điều này giả sử bạn đang sử dụng bash shell. Một số shell khác, đặc biệt là csh và tcsh và một số shell có nguồn gốc từ sh cũ hơn, có thể không hỗ trợ $(...)
cú pháp. Bạn có thể sử dụng cú pháp backtick tương đương:
$ rm -f `ls | grep -i '^abc\.log\.'`
Các $(...)
cú pháp là dễ dàng hơn để đọc, và nếu bạn thực sự đầy tham vọng nó có thể được lồng vào nhau.
Cuối cùng, nếu tập hợp con của các tệp bạn muốn xóa không thể được thể hiện dễ dàng bằng một biểu thức chính quy, một mẹo mà tôi thường sử dụng là liệt kê các tệp vào một tệp văn bản tạm thời, sau đó chỉnh sửa nó:
$ ls > list
$ vi list # Use your favorite text editor
Sau đó, tôi có thể chỉnh sửa list
tệp theo cách thủ công, chỉ để lại các tệp tôi muốn xóa và sau đó:
$ rm -f $(<list)
hoặc là
$ rm -f `cat list`
(Một lần nữa, điều này giả định rằng không có tên tệp nào chứa các ký tự vui nhộn, đặc biệt là dấu cách.)
Hoặc, khi chỉnh sửa list
tệp, tôi có thể thêm rm -f
vào đầu mỗi dòng và sau đó:
$ . ./list
hoặc là
$ source ./list
Chỉnh sửa tệp cũng là một cơ hội để thêm dấu ngoặc kép khi cần thiết, ví dụ như thay đổi rm -f foo bar
thành rm -f 'foo bar'
.