Hôm nay, chúng tôi sẽ chỉ cho bạn một cách mà bạn có thể xóa các tệp cũ hơn 'X' ngày. Giả sử bạn muốn xóa các tập tin cũ hơn 7 ngày thì bài viết này sẽ giúp bạn thực hiện điều đó. Tiện ích tìm kiếm cho phép bạn chuyển một số đối số thú vị, bao gồm một đối số để thực thi một lệnh khác trên mỗi tệp. Để tìm ra tệp nào cũ hơn một số ngày nhất định, chúng tôi sẽ sử dụng tìm tiện ích và sau đó sử dụng lệnh rm để xóa chúng. Cú pháp lệnh như sau:
find / path / to / files * -mtime +5 -exec rm {} \;
Chúng tôi không chịu trách nhiệm về bất kỳ mất mát dữ liệu nào có thể xảy ra. Chúng tôi đã giới thiệu bạn với liệt kê các tệp và kiểm tra trước khi xóa chúng, bằng cách chạy lệnh sau:
find / path / to / files * -mtime +5 -exec ls {} \;
LƯU Ý Có khoảng trắng giữa rm, {} và \;

Giải thích Lệnh:
Đối số đầu tiên trong lệnh trên là đường dẫn đến các tập tin. Đối số thứ hai là -Mtime được sử dụng để chỉ định tệp có tuổi đời bao nhiêu ngày. Nếu bạn nhập +5, nó sẽ tìm thấy các tệp cũ hơn năm ngày. Đối số cuối cùng là -Exec cho phép bạn chuyển một lệnh chẳng hạn như rm. Các {} \; ở cuối là yêu cầu để kết thúc lệnh.
Điều này sẽ hoạt động trên hầu hết các phiên bản của Linux như Ubuntu, Fedora, Red Hat, Suse, v.v. Nếu bạn đang gặp phải bất kỳ vấn đề nào mà dường như không thể xảy ra ở đây, hãy cho chúng tôi biết trong phần bình luận bên dưới.
Suraj Salunkhe
Tôi đã sử dụng thủ thuật này! Bí quyết tuyệt vời! Cảm ơn vì đã chia sẻ một thủ thuật hay :)
Amruta Patil
Ya Tôi đã sử dụng cammand này trong buổi thực hành của RHCE.
Ben
find ./* -mtime +5 -exec ls {} \; >> ./5DaysOld
alias 5DayLs="find ./* -mtime +5 -exec ls {} \; >> ./5DaysOld"
Kết hợp một cái gì đó với đề xuất của bạn ở đây. Một phương pháp để tạo một tệp văn bản thuần túy liệt kê các tệp đã có từ năm ngày trước. Dễ dàng lưu giữ hồ sơ để xem trước khi xóa tệp. Sau đó, người dùng có thể sử dụng cat, vi, vim, gedit, emacs để xem những gì họ có thể tung ra.
find ./* -mtime +5 -exec ls {} \; >> ./5DaysOld
Chia nhỏ nó ./ là thư mục hiện tại. Tìm bằng cách sử dụng thư mục hiện tại thường an toàn hơn so với sử dụng / pháo. >> gắn vào một tệp, nếu nó không tồn tại, nó sẽ được tạo.
Thậm chí nghĩ rằng nó có thể hữu ích như một bí danh. Có lẽ có thể / nên chuyển nó sang một tập lệnh shell trước. Mặc dù lười biếng, muộn ở đây.
Ben Piper
Cảm ơn! Tôi đã sử dụng cú pháp này trong một công việc cron.
Vivian
Mẹo hay để xóa các tệp cũ hơn một số ngày nhất định. Tuy nhiên, nếu danh sách đối số của bạn dài (tôi nghĩ giá trị tối đa là 65535 hoặc thứ gì đó dọc theo những dòng đó) thì điều này sẽ không hoạt động.
Tôi có một tập lệnh tùy chỉnh thực hiện công việc:
#!/bin/bash
cd /directory-to-be-checked
allfiles=`ls`
NOW=`date +%s`
for filename in $allfiles
do
OLD=`stat -c %Z $filename`
if [ "$2" == "" ]
then
DELAY=86400
else
let "DELAY=$2 * 86400"
fi
AGE=`expr $NOW - $OLD`
#echo "Delay is $DELAY and Age is $AGE"
#exit 0
if [ $AGE -gt $DELAY ]
then
#echo "File $filename is $AGE"
fstamp=`ls -l $filename`
if [ "$1" == "DEL" ]
then
echo "Deleting file $filename"
`rm -f $filename`
else
echo "$fstamp"
fi
fi
Xong.
Rajesh Namase
Cảm ơn vì đã đưa ra kịch bản.
Vivian
Chào mừng bạn Namase.
Gọi script như vậy:
./scriptname.sh DEL numDays
Nếu numDays không được chỉ định, nó sẽ sử dụng tối thiểu là 1, vì vậy hãy đảm bảo rằng bạn chỉ định numDays. Tôi không chịu trách nhiệm về cách bạn sử dụng tập lệnh này và bất kỳ mất mát dữ liệu nào có thể xảy ra.
Pawan
nếu tôi muốn Xóa các ký tự và tệp từ 30 ngày tuổi vào máy tính từ xa của mình và một thứ không bao gồm các ký tự 1 và 2 hoặc 3 và vậy làm cách nào tôi có thể thực hiện việc này .. ?? Hãy chia sẻ suy nghĩ của bạn.
Ali
Tôi sử dụng kỹ thuật này, nó rất hữu ích để xóa tệp trc trong oracle
Ethan
Cảm ơn bạn đã chia sẻ lệnh hữu ích này cho tất cả người dùng. Chúng tôi có thể dễ dàng xóa các tệp cũ hơn trong Linux. Tôi cũng đang tìm kiếm nó và cuối cùng đã có giải pháp ở đây.
Greg
Điều này cũng nhận được các tệp trong các thư mục con? Nếu vậy, tôi sẽ làm như thế nào để nó không bị lỗi?
find / home / greg / logs -type f -mtime +5 -exec rm {};
Suraj Salunkhe
Tôi đã tìm kiếm lệnh như vậy. Thực sự hữu ích. Và cảm ơn vì đã chia sẻ kịch bản, Vivian.