Tôi đã sửa chữa một số thứ vào một thư mục đã chứa rất nhiều thứ. Thay vào đó, tôi muốn thay thế một thư mục riêng. Bây giờ có quá nhiều tệp để phân biệt giữa. Tuy nhiên, các tệp mà tôi đã không được khắc phục đã được tạo ngay bây giờ (phải không?) Và các tệp gốc chưa được sửa đổi trong thời gian dài (ít nhất một ngày). Có cách nào để xóa chỉ những tệp không được xác thực này dựa trên thông tin tạo của chúng không?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?
Trả lời
Tar thường khôi phục dấu thời gian tệp, vì vậy việc lọc theo thời gian sẽ không hoạt động.
Nếu bạn vẫn có file tar, bạn có thể sử dụng nó để xóa những gì bạn giải nén với một cái gì đó như:
tar tf file.tar --quoting-style=shell-always |xargs rm -i
trên sẽ làm việc trong hầu hết các trường hợp, nhưng không phải tất cả (tên tập tin đó có một vận chuyển trở lại trong họ sẽ phá vỡ nó), vì vậy hãy cẩn thận.
Bạn có thể xóa các thư mục bằng cách thêm -r
vào điều đó, nhưng có thể an toàn hơn khi chỉ xóa các thư mục toplevel theo cách thủ công.
tìm. -mtime -1 -type f | xargs rm
nhưng trước tiên hãy thử nghiệm với
tìm. -mtime -1 -type f | xargs echo
Điều này sẽ tốt trừ hai điều. Đầu tiên, ** luôn luôn ** sử dụng '-print0' và' xargs -0'. Bạn không muốn các ký tự khoảng trống ngẫu nhiên trong tên tập tin gây ra vấn đề cho bạn. Thứ hai, 'tar' khôi phục dấu thời gian, vì vậy bạn không thể sử dụng mtime ở đây. Có lẽ lúc này, có thể, nếu hệ thống tập tin của bạn đã được cấu hình để cập nhật nó. – Omnifarious
Ngoài ra, lưu ý ví dụ: find-mmin -10 cho các tệp được sửa đổi trong mười phút qua – sehe
Có một số câu trả lời khác nhau cho câu hỏi này để tăng độ phức tạp. Trước tiên, nếu đây là một lần tắt, và trong trường hợp cụ thể này, bạn hoàn toàn chắc chắn rằng không có ký tự lạ trong tên tệp của bạn (dấu cách là OK, nhưng không phải tab, dòng mới hoặc ký tự điều khiển khác, cũng không phải ký tự unicode) điều này sẽ hoạt động:
tar -tf file.tar | egrep '^(\./)?[^/]+(/)?$' | egrep -v '^\./$' | tr '\n' '\0' | xargs -0 rm -r
Tất cả việc bỏ qua đó là bỏ qua tất cả các thư mục con của thư mục con.
Một cách khác để làm điều này làm việc với các tên tập sôi nổi là thế này:
mkdir foodir
cd foodir
tar -xf ../file.tar
for file in *; do rm -rf ../"$file"; done
Điều đó sẽ tạo ra một thư mục trong đó lưu trữ của bạn đã được mở rộng, nhưng có vẻ như bạn muốn mà đã anyway. Nó cũng sẽ không xử lý bất kỳ tệp nào có tên bắt đầu bằng .
.
Để làm cho rằng phương pháp làm việc với các tập tin bắt đầu bằng .
, làm điều này:
mkdir foodir
cd foodir
tar -xf ../file.tar
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0 sh -c 'for file in "[email protected]"; do rm -rf ../"$file"; done' junk
Cuối cùng, lấy từ Mat's answer, bạn có thể làm điều này và nó sẽ làm việc cho bất kỳ tên tập tin và không yêu cầu bạn phải tar sự thư mục một lần nữa:
tar -tf file.tar | egrep '^(\./)?[^/]+(/)?$' | grep -v '^\./$' | tr '\n' '\0' | xargs -0 bash -c 'for fname in "[email protected]"; do fname="$(echo -ne "$fname")"; echo -n "$fname"; echo -ne "\0"; done' junk | xargs -0 rm -r
Bạn có thể xử lý các tập tin và thư mục trong một đường chuyền với:
tar -tf ../test/bob.tar --quoting-style=shell-always | sed -e "s/^\(.*\/\)'$/rmdir \1'/; t; s/^\(.*\)$/rm \1/;" | sort | bash
Bạn có thể xem những gì sẽ xảy ra rời khỏi ống để 'bash'
tar -tf ../test/bob.tar --quoting-style=shell-always | sed -e "s/^\(.*\/\)'$/rmdir \1'/; t; s/^\(.*\)$/rm \1/;" | sort
để xử lý tên tập tin với linefeeds bạn cần chế biến nhiều hơn nữa.
- 1. Các tệp gần đây trong thư mục
- 2. 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
- 3. Xóa tất cả các tệp git khỏi một thư mục?
- 4. Làm thế nào để xóa tất cả các thư mục con trong một số thư mục trong Ant?
- 5. Buộc xóa tất cả các tệp khỏi một thư mục
- 6. Làm thế nào để đuôi tất cả các tệp nhật ký bên trong một thư mục và thư mục con?
- 7. Xóa tất cả các tập tin trong một thư mục
- 8. Làm thế nào để xóa tất cả các tệp trong thư mục trên máy chủ từ xa trong python?
- 9. làm thế nào để liệt kê tất cả các thư mục con trong một thư mục
- 10. Mã Python để tìm tất cả các tệp mới được tạo, sửa đổi và xóa trong tất cả các thư mục/thư mục con bắt đầu từ/directory
- 11. Làm thế nào để quên tất cả các tệp đã bị xóa bằng Mercurial
- 12. Làm thế nào để có được danh sách tất cả các tin nhắn cam kết SVN gần đây?
- 13. Làm cách nào để xóa tất cả các tệp/thư mục con ngoại trừ một số tệp trong DOS?
- 14. Linux có thể dọn sạch nội dung của tất cả các tệp trong một thư mục
- 15. cách xóa tất cả các tệp trừ ba tệp mới nhất trong một thư mục
- 16. Mở tất cả các tệp trong một thư mục
- 17. Trích xuất tất cả các tệp có đường dẫn thư mục trong thư mục đã cho
- 18. Làm thế nào để tải tất cả các tập tin trong một thư mục với XNA?
- 19. Làm thế nào để xóa tất cả các tập tin trong một thư mục bằng cách sử dụng hàng loạt?
- 20. Xóa tất cả các mục được lưu trong bộ nhớ cache được tạo bởi một WebView?
- 21. Android, làm cách nào để có danh sách tất cả các tệp trong một thư mục?
- 22. Cách tìm tất cả các tệp có thư mục mẹ cụ thể trong linux?
- 23. Tạo một thư mục con cho tất cả các thư mục trong thư mục
- 24. Làm cách nào để tìm tất cả các tệp trong Thư mục có grep và regex?
- 25. Linux tất cả các tệp của thư mục được sửa đổi ngày hôm qua
- 26. PBXCP: Không có tệp hoặc thư mục nào như vậy, trong xcode gần đây nhất
- 27. Làm thế nào để xóa tất cả nội dung của một thư mục với Ruby-Rails?
- 28. Cách gzip tất cả các tệp trong tất cả các thư mục con trong bash
- 29. Lệnh Unix để xóa tất cả các tệp trong một thư mục nhưng giữ lại thư mục
- 30. Java tải xuống tất cả các tệp và thư mục trong một thư mục
Nó thực sự dễ dàng để làm cho nó làm việc với không gian trong tên tập tin, và đó sẽ là một câu trả lời tốt hơn nhiều. – Omnifarious
@omnifa cách làm công việc này với không gian? để loại bỏ các thư mục được trích xuất, tôi cũng nên bao gồm -R sau khi rm? – AnkurVj
@AnkurVj: Thật không may là không thực sự là một cách để làm cho tar cung cấp cho bạn một danh sách các tên tập tin rỗng tách biệt, điều này khá thất vọng. Và có, phải có một '-r' sau' rm'. Vì Mat không cập nhật câu trả lời, tôi sẽ tự đặt câu trả lời. – Omnifarious