Nếu bạn muốn xóa tất cả các tệp có tên khớp với một biểu mẫu cụ thể, một ký tự đại diện (mẫu hình cầu) là giải pháp đơn giản nhất. Một số 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
Cụm từ thông dụng mạnh hơn ký tự đại diện; bạn có thể cho đầu ra của grep
đến rm -f
.Ví dụ, nếu một số tên tập tin bắt đầu với "abc.log"
và một số với "ABC.log"
, grep
cho phép bạn làm một trận đấu case-insensitive:
$ rm -f $(ls | grep -i '^abc\.log\.')
Khi tôi làm điều này, tôi chạy lệnh ls | grep ...
đầu tiên và kiểm tra xem nó tạo ra đầu ra 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 để các lệnh trước đó. Hoặc tôi có thể nhập mũi tên lên hoặc Ctrl-P và chỉnh sửa dòng trước để thêm lệnh rm -f
.
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ó gốc 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 các tập hợp con của các tập tin bạn muốn xóa không thể dễ dàng bày tỏ với một biểu thức chính quy, một thủ thuật tôi thường sử dụng là lập danh sách các tập tin vào một tập tin 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 các tập tin list
bằng tay, chỉ để lại các tập tin tôi muốn loại bỏ, và sau đó:
$ rm -f $(<list)
hoặc
$ rm -f `cat list`
(Điều này giả định không ai trong số các tên tập tin chứa các ký tự hài hước, đặc biệt là không gian.)
Hoặc, khi chỉnh sửa các tập tin list
, tôi có thể thêm rm -f
đến đầu của mỗi dòng và sau đó:
$ . ./list
hoặc
$ source ./list
Và "Nói GNU/Linux, không chỉ Linux", tôi nghe thấy tiếng sột soạt từ ghế sau. –
Nhân tiện, tại sao tthe -rf? Các thư mục này có phải không? f là lực, r là đệ qui. Nó sẽ hoạt động nếu nó chỉ là một tập tin nhưng được cảnh báo, sử dụng -rf mỗi khi bạn muốn xóa một cái gì đó rất (rất) (rất rất) nguy hiểm. (và bạn nên thêm thẻ "bash" vì "linux" quá rộng. – Depado
@BorisStitnicky - Tôi tò mò muốn biết tại sao 'GNU' là cần thiết? – user66001