Bên trong một thư mục, làm cách nào để xóa các tệp thiếu bất kỳ từ nào được chỉ định để chỉ các tệp chứa TẤT CẢ các từ còn lại? Tôi đã cố gắng để viết một kịch bản shell bash đơn giản bằng cách sử dụng lệnh grep và rm, nhưng tôi đã bị mất. Tôi hoàn toàn mới sang Linux, bất kỳ trợ giúp sẽ được đánh giá caoLinux: Xóa các tệp không chứa tất cả các từ được chỉ định
Trả lời
Làm thế nào về:
grep -L foo *.txt | xargs rm
grep -L bar *.txt | xargs rm
Nếu tệp có không chứa foo
, thì dòng đầu tiên sẽ được làm lại ve nó.
Nếu một tập tin không không chứa bar
, sau đó dòng thứ hai sẽ loại bỏ nó.
Chỉ những tập tin có chứa cả foo
và bar
nên để
-L, --files-without-match
Suppress normal output; instead print the name of each input
file from which no output would normally have been printed. The
scanning will stop on the first match.
Xem thêm @Mykola Golubyev's post để đặt trong một vòng lặp.
Thứ nhất, loại bỏ các filelist:
rm flist
Sau đó, đối với mỗi người trong số các từ, thêm các tập tin vào filelist nếu nó có chứa từ đó :
grep -l WORD * >>flist
Sau đó sắp xếp, uniqify và có được một số lượng:
sort flist | uniq -c >flist_with_count
Tất cả các tập tin trong flsi t_with_count không có số từ cần xóa. Định dạng sẽ là:
2 file1
7 file2
8 file3
8 file4
Nếu có 8 từ, thì tệp1 và tệp2 sẽ bị xóa. Tôi sẽ để lại văn bản/thử nghiệm của kịch bản cho bạn.
Được rồi, bạn đã thuyết phục tôi, đây là kịch bản của tôi:
#!/bin/bash
rm -rf flist
for word in fopen fclose main ; do
grep -l ${word} *.c >>flist
done
rm $(sort flist | uniq -c | awk '$1 != 3 {print $2} {}')
này loại bỏ các tập tin trong thư mục đó không có tất cả ba chữ:
này sẽ loại bỏ tất cả các file mà không chứa các từ Ping hoặc Sent
grep -L 'Ping\|Sent' * | xargs rm
Thao tác này sẽ không xóa các tệp chỉ chứa một trong các Từ. –
Có, tôi đã nhận thấy rằng đã và nhấn xóa, nhưng đã quá muộn. –
list=`Word1 Word2 Word3 Word4 Word5`
for word in $list
grep -L $word *.txt | xargs rm
done
bổ sung các câu trả lời ở trên: Sử dụng các ký tự xuống dòng như delimiter để xử lý tên tập tin với không gian !
grep -L $word $file | xargs -d '\n' rm
grep -L word | xargs rm
Để làm tên tập tin khớp cùng (không phải là nội dung của các file như hầu hết các giải pháp nêu trên), bạn có thể sử dụng như sau:
for file in `ls --color=never | grep -ve "\(foo\|bar\)"`
do
rm $file
done
Theo nhận xét:
for file in `ls`
shouldn không được sử dụng. Dưới đây làm điều tương tự mà không sử dụng ls
for file in *
do
if [ x`echo $file | grep -ve "\(test1\|test3\)"` == x ]; then
rm $file
fi
done
các -ve đảo ngược việc tìm kiếm các mô hình regexp cho một trong hai foo hoặc thanh trong tên tập tin. Bất kỳ từ nào khác cần thêm vào danh sách cần được phân tách bằng \ | ví dụ: một \ | hai \ | ba
Bạn có thể thử một cái gì đó như thế này nhưng nó có thể phá vỡ nếu mẫu chứa vỏ hoặc grep ký tự meta:
(trong ví dụ này một hai ba là các mẫu)
for f in *; do
unset cmd
for p in one two three; do
cmd="fgrep \"$p\" \"$f\" && $cmd"
done
eval "$cmd" >/dev/null || rm "$f"
done
- 1. Xóa tất cả các tệp được tạo bởi người dùng được chỉ định
- 2. xóa tất cả các tệp có kích thước bằng không trong thư mục được chỉ định
- 3. Xóa các dòng có chứa từ khóa khỏi một tệp
- 4. Nhận tất cả các thư mục con chỉ chứa các tệp
- 5. Tìm kiếm toàn văn MySQL - Chỉ các kết quả có chứa tất cả các từ
- 6. Làm thế nào để xóa tất cả các tệp gần đây đã được tạo trong một thư mục trong linux?
- 7. linux bash - xóa tất cả các tệp nằm trong một thư mục từ một thư mục khác
- 8. Xóa tất cả các chỉ mục trong Lucene.net
- 9. MySQL xóa tất cả các chỉ mục khỏi bảng
- 10. Tải xuống tất cả các tệp từ Máy chủ FTP
- 11. Nhận tất cả các hàng không được lọc từ jqGrid
- 12. Git thêm tất cả các tệp đã sửa đổi, xóa và không được theo dõi?
- 13. Bash. Xóa tất cả các tệp và thư mục nhưng một số tệp nhất định
- 14. Xóa tất cả các tệp cho git commit?
- 15. Git chỉ thêm tất cả các tệp mới, chứ không phải các tệp đã sửa đổi
- 16. Xóa tất cả các tệp git khỏi một thư mục?
- 17. Buộc xóa tất cả các tệp khỏi một thư mục
- 18. Tệp văn bản tìm kiếm C#, trả lại tất cả các dòng có chứa một từ
- 19. git cam kết xóa tất cả các tệp trong repo
- 20. Emacs, xóa tất cả các dòng không khớp?
- 21. Cách xóa tất cả các cam kết từ đầu
- 22. Tại sao TileUpdater.Clear() không xóa tất cả các cập nhật?
- 23. Linux tất cả các tệp của thư mục được sửa đổi ngày hôm qua
- 24. Sử dụng R để liệt kê tất cả các tệp có phần mở rộng được chỉ định
- 25. Xóa tất cả các mục từ một danh sách
- 26. Xóa tất cả các ngắt dòng (BR)
- 27. Xóa tất cả các hàng trong bảng
- 28. git: Chỉ liệt kê các tệp được sửa đổi cho tất cả các dấu gạch ngang
- 29. LINUX: Liên kết tất cả các tệp từ một đến thư mục khác
- 30. CakePHP không nhận được tất cả các trường từ DB?
tôi nghĩ rằng các tệp có foo OR bar, sẽ bị xóa với điều này. – claf
Không - -L phủ nhận grep. – toolkit
@toolkit: oups, xấu của tôi. – claf