Đây là một cách an toàn:
grep -lrIZ foo . | xargs -0 rm -f --
-l
in tên tệp của tệp phù hợp với mẫu tìm kiếm.
-r
thực hiện tìm kiếm đệ quy cho mẫu foo
trong thư mục đã cho .
. Nếu điều này không hiệu quả, hãy thử -R
.
-I
(viết hoa i
) khiến các tệp nhị phân như PDF bị bỏ qua.
-Z
đảm bảo rằng tên tệp bằng 0- (nghĩa là nul-) bị chấm dứt để tên chứa khoảng trắng không bị hiểu sai (nghĩa là nhiều tên thay vì một tên).
xargs -0
cung cấp tên tệp từ grep
đến rm -f
, tách các từ bằng byte (nul) byte (nhớ -Z
tùy chọn từ grep
).
--
thường bị lãng quên nhưng điều rất quan trọng là đánh dấu sự kết thúc của các tùy chọn và cho phép xóa các tệp có tên bắt đầu -
.
Nếu bạn muốn xem tập tin nào sắp bị xóa, chỉ cần xóa | xargs -0 rm -f --
phần đó và bỏ Z
tùy chọn grep
.
Một người dùng khác đã đề xuất một cái gì đó như sau, mà bạn không nên chạy vì nó không an toàn:
files=`grep foo * | cut -d: -f1`
rm -f $files # unsafe, do not run it!
Nếu tôi có các tệp ImportantStuff
mà tôi không muốn xóa và obsolete ImportantStuff
chứa foo
, thì tôi sẽ mất ImportantStuff
(và không obsolete ImportantStuff
!) Khi tôi chạy lệnh này, vì $files
bị phá vỡ tại các khoảng trắng khi nó được giải thích. Thật nguy hiểm khi đặt một danh sách tên tệp vào biến vỏ vô hướng theo cách này.