Làm cách nào để làm cho hệ thống của tôi xóa tất cả các tệp trong một thư mục cũ hơn một thời gian nhất định trong khi vẫn giữ nguyên cấu trúc thư mục?


12

Tôi có một thư mục trên máy của mình, nghĩ về nó như một loại tmpthư mục của riêng tôi , nhưng nó nằm trong ~thư mục của tôi . Và tôi muốn làm cho nó để hệ thống của tôi cứ sau 3 giờ xóa tất cả các tệp trong (mặc dù vẫn giữ nguyên cấu trúc thư mục, nhưng vẫn xóa tất cả các tệp trong tất cả các cấp của thư mục) thư mục đó cũ hơn một ngày.

Tôi đang chạy Ubuntu Gnome 15.10 với Gnome 3.18, điều này có thể được thực hiện không? Và nếu vậy thì thế nào? Tôi muốn điều này hoàn toàn tự động mà không cần tương tác người dùng. Đây sẽ là một cái gì đó tự động bắt đầu khi tôi đăng nhập, vì vậy tôi không cần phải chạy một cái gì đó trên mỗi lần khởi động.

Câu trả lời:


21

Sử dụng find:

find ~/tmp -type f -mtime +0 -delete
  • ~/tmp là thư mục được tìm kiếm đệ quy, thay đổi điều này cho phù hợp

  • -type f sẽ chỉ tìm các tập tin

  • -mtime +0 sẽ khớp với một tập tin nếu nó được sửa đổi lần cuối một ngày trở lên

  • -delete sẽ chỉ xóa (các) tệp phù hợp

Ở đây -mtime +0, phần lớn có thể nghĩ đến việc sử dụng -mtime +1nhưng findsẽ bỏ qua mọi thời gian phân số trong khi tính ngày. Vì vậy, -mtime +1sẽ khớp với một tệp nếu lần sửa đổi cuối cùng được thực hiện ít nhất 2 ngày trước.

Trích dẫn man find, -mtimecó quy ước thời gian tương tự như -atime:

-tần n

Tập tin được truy cập lần cuối n * 24 giờ trước. Khi tìm số liệu xem có bao nhiêu khoảng thời gian 24 giờ trước khi tệp được truy cập lần cuối, bất kỳ phần phân số nào cũng bị bỏ qua, do đó, để khớp với +1, một tệp phải được truy cập ít nhất hai ngày trước.

Cũng lưu ý rằng nếu bạn muốn độ chính xác, bạn nên xem -mmintùy chọn findđể chỉ thời gian tính bằng phút.

Để chạy định kỳ sau 3 giờ, bạn có thể thêm một cronmục.

Chạy crontab -evà thêm:

00 */3 * * * /usr/bin/find ~/tmp -type f -mtime +0 -delete

Sử dụng zshđể xóa các tệp:

rm ~/tmp/**/*(.-m+0)

Thêm vào cron:

00 */3 * * * /usr/bin/zsh -c 'rm ~/tmp/**/*(.-m+0)'

6

Bạn sẽ có thể xóa tất cả các tệp cũ hơn 1 ngày trong /home/username/directoryvà tất cả các thư mục bên dưới nó với:

find /home/username/directory -type f -mtime +1 -delete

Và để lên lịch lệnh đó cứ sau ba giờ, hãy đặt nó làm công việc định kỳ:

crontab -e

Sau đó, bên trong crontab:

0 */3 * * * find /home/username/directory -type f -mtime +1 -delete

Mà chạy lệnh của bạn cứ sau ba giờ vào giờ (tức là phút 0), vì vậy 3:00 sáng, 6:00 sáng, v.v.

Đi croncrontab manpagesđể biết thêm thông tin về họ.


4
Câu trả lời này thực sự sai, xin vui lòng xem câu trả lời khác .

4
Vì câu trả lời này là sai và thực tế không nói gì hơn câu trả lời khác, vui lòng cải thiện câu trả lời của bạn sao cho câu trả lời đúngtốt hơn câu trả lời khác hoặc xóa nó.

5
@ParanoidPanda Tôi hiểu rằng bạn muốn có câu trả lời chất lượng cao, nhưng nhận xét về cơ bản cùng một điều hai lần là không cần thiết và có thể được coi là hung hăng, đặc biệt đối với người dùng mới.
RPiAwesessess

2
@RPiAwesomeness: Vâng, tôi đã nhận xét lần thứ hai vì tôi đã hết thời gian để chỉnh sửa nhận xét đầu tiên của mình và tôi cũng muốn nói rằng họ nên xóa câu trả lời của mình, điều mà có lẽ không phải là điều gì đó cần thiết từ nhận xét đầu tiên của tôi, mặc dù tôi không muốn họ cảm thấy bị tấn công và giống như tôi chỉ nói rằng họ đã trả lời sai và bây giờ phải xóa nó, vì vậy tôi đã thêm một chút về cải thiện. Nhưng tôi có thể thấy làm thế nào điều này có thể được thực hiện sai cách, vì vậy tôi yêu cầu bạn nhớ: một con gấu trúc chỉ trở nên hung dữ khi bạn lấy đi cây tre của mình. ;-)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.