毎日のサブディレクトリが作成されるディレクトリがあり、文字通り_$date
_に従って名前が付けられています。メタデータの日付ではなく、7日より古いフォルダとその内容を削除するにはどうすればよいですかファイル名のYYYYMMDDによる?私が持っていると言う(簡潔にするためにいくつかスキップした):
_20170817
20170823
20170828
20170901
_
私は次のフォルダになってしまいます(それらは保持する必要があります):
_20170828
20170901
_
7日前の日付を保持する変数を作成しました:dt_prev=$(date -d "`date`-7days" +%Y%m%d)
私の考えは、これらのフォルダ名のリストを_ls -l
_して行ごとに比較することでしたが、これにはそのリストのクリーニングなどが含まれ、もっと簡単な方法が必要だと思います。
解決策は、 glenn jackmanが投稿したもの のより単純なバージョンになると思います。
seven_days=$(date -d "7 days ago" +%Y%m%d)
for f in [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]; do
[ -d "$f" ] || continue
(( $f < $seven_days )) && echo rm -r "$f"
done
結果が正しいように見える場合は、echo
を削除します。
-d
testは、ディレクトリのみを検査(削除)することを確認します。
parse ls
ではなく、次のようなことができます。
for f in *; do test "$f" -lt "$date" && do something; done
あなたの例では、次のディレクトリとdate=20170825
:
$ ls
20170817 20170823 20170828 20170901
$ for f in *; do test "$f" -lt "$date" && echo "$f"; done
20170817
20170823
find
コマンドを使用するだけです。
find . -type d ! \( -name "$(date -d "-7 days" +%Y%m%d)" \
$(eval printf "%s" "\" -o -name \
\$(date -d -"{6..0}"days +%Y%m%d)\"") -o -name . \) -exec rm -rf -- '{}' +
-type d
rm -rf -- '{}'
一度に+
単一のfind
コマンドの場合:
date_week_ago=$(date -d "7 days ago" +%Y%m%d)
find . -type d -regextype posix-extended -regex '.*/[0-9]{8}$' \
-exec bash -c 'd=$(basename {}); (( '$date_week_ago' > $d )) && rm -rf "$d"' \;