7日より古いファイルを削除してから7日より古い空のディレクトリを削除するには、次のコードを作成しました。
ファイルの削除
find "$CDIR" ! -type d -mtime +7 -exec sh -c '
for pathname do
if ! rm -fv "$pathname"; then
((err_count_f++))
fi
done' sh {} +
ディレクトリの削除
find "$CDIR" -type d -empty -mtime +7 -exec sh -c '
for pathname do
if ! rmdir -v "$pathname"; then
((err_count_d++))
fi
done' sh {} +`
ただし、ディレクトリ内のファイルを削除すると、そのディレクトリのmtimeが変更されるため、リンクされた空のディレクトリは削除されません。この問題を克服する最良の方法は何ですか?
ベストアンサー1
互換性zsh
(およびGNUfind
または互換性-delete
):
cd -P -- "$CDIR" || exit
old_dirs=(**/*(DNm+6))
find . -mtime +6 ! -type d -delete
empty_old_dirs=($^old_dirs(N^F))
(($#empty_old_dirs == 0)) || rmdir -- $empty_old_dirs
-mtime
およびzsh
のグローバル修飾子は、整数m
(下り)日数で表される年齢に適用されます。-mtime -6
6歳未満、-mtime 6
6歳(実際には6~7日)-mtime +6
、厳しく6日以上、つまり7日以上です。
-mtime +6
したがって、7日より古いファイルの場合は代わりに必要です-mtime +7
(少なくともPOSIX準拠のfind
実装では、すべてのファイルではなくGNUファイルがそうです)。