ファイルの削除

ファイルの削除

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 -66歳未満、-mtime 66歳(実際には6~7日)-mtime +6厳しく6日以上、つまり7日以上です。

-mtime +6したがって、7日より古いファイルの場合は代わりに必要です-mtime +7(少なくともPOSIX準拠のfind実装では、すべてのファイルではなくGNUファイルがそうです)。

おすすめ記事