Thời gian truy cập trên một thư mục hiếm khi hữu ích. Lần đầu tiên bạn chạy ls
hoặc find
trong thư mục, thời gian truy cập của nó được cập nhật.
Bạn có thể chỉ cần tìm các tệp không được truy cập trong một thời gian dài:
find . -type f -atime +999 -print
Nếu bạn chỉ quan tâm đến các thư mục trong đó không có tệp nào được truy cập trong một thời gian dài, bạn có thể kết hợp một find
lệnh để khám phá các thư mục và một find
lệnh để khám phá các tệp trong một thư mục.
find . -type d -exec sh -c '
recent=$(find "$0" -mindepth 1 -maxdepth 1 ! -type f -atime +999 -print | head -n 1)
if [ -z "$recent" ]; then printf %s\\n "$0"; fi
' {} +
Lưu ý rằng đoạn mã này có thể in ra một thư mục trong đó không có tệp thông thường nào được truy cập gần đây nhưng có những tệp đã được truy cập gần đây. Bỏ qua những điều này không dễ dàng với find
một mình, trừ khi bạn chỉ cần loại bỏ các -maxdepth 1
thư mục đi qua một cách độc lập sẽ gây ra nhiều hoạt động đĩa lặp lại. Đây là một tập lệnh bash chưa được kiểm tra giúp thư mục đi theo cách thủ công, theo dõi những thư mục nào chỉ chứa các tệp không được truy cập gần đây.
#!/bin/bash
shopt -s dotglob
explore () {
local entry keep=
for entry in "$1/"*; do
if [ -L "$entry" ]; then
:
elif [ -d "$entry" ]; then
if explore "$entry"; then
keep=1 # Keep this directory, it contains kept directories
fi
elif [ -f "$entry" ]; then
if [ -z "$(find "$entry" -atime +999 -print)" ]; then
keep=1 # Keep this directory, it contains a recently-accessed file
fi
fi
done
if ((!keep)); then
echo "$1"
return 1
fi
return 0
}
explore .
atime
bộ lọc là cần thiết, tôi không thể nghĩ về bất kỳ tình huống nào mà một thư mục sẽ được sửa đổi nhưng không được truy cập.