Tôi cần tìm tất cả các tệp bắt đầu bằng tên NAME
trong cây thư mục và xóa tất cả các tệp này bằng một lệnh shell.
Tôi cần tìm tất cả các tệp bắt đầu bằng tên NAME
trong cây thư mục và xóa tất cả các tệp này bằng một lệnh shell.
Câu trả lời:
để xóa tất cả các tệp có tên --- bạn có thể sử dụng
find -name . 'name*' -exec rm {} \;
grep
có -exec
công tắc?
Xóa tất cả các tệp trong thư mục hiện tại và các thư mục con của nó trong đó tên tệp bắt đầu bằng "foo":
$ find . -type f -name foo\* -exec rm {} \;
Lưu ý: sử dụng một cách thận trọng - sao lưu trước - cũng thực hiện chạy khô trước, ví dụ:
$ find . -type f -name foo\*
sẽ chỉ cho bạn biết tên của các tệp sẽ bị xóa.
find . -type f -name foo\* -delete
đã thực hiện thủ thuật
Tôi đã thử cách này nó hoạt động cho tôi thử dưới đây lệnh.
rm -rf Example*
ở đây "Ví dụ" là văn bản phổ biến cho tất cả các tệp.
Bạn có thể sử dụng find
:
find . -name "name*" -exec rm {} \;
Với globstar
tùy chọn (bật với shopt -s globstar
):
rm -f **/NAME*
**/
mở rộng để ./
, */
, */*/
, */*/*/
vv Nếu bạn có một thư mục tên bắt đầu với NAME
, lệnh sẽ phàn nàn rằng rm
không thể loại bỏ các thư mục, nhưng đó là tất cả.
Lưu ý rằng điều này có thể chạy vào các giới hạn độ dài dòng lệnh nếu toàn cục khớp với nhiều tệp.
Ngoài ra, với càng ít lời mời rm
càng tốt, nhưng không chịu bất kỳ giới hạn độ dài dòng lệnh nào:
find . -type f -name 'NAME*' -exec rm -f {} +
(Lưu ý +
thay vì \;
đóng -exec
câu lệnh.)
find . -name 'foo'* -type f -delete
có vẻ như câu trả lời đơn giản nhất
Bạn có thể chạy cái này mà không cần -delete
cờ trước để xem tập tin nào sẽ bị xóa.
Tìm kiếm số "Inode" của tệp / thư mục và sau đó xóa bằng số inode. Dưới đây là một ví dụ:
ls -il
3407873 drwxr-xr-x. 2 root root 4096 Mar 30 07:49 –p
find . -inum 3407873 -exec rm -rf {} \;