Ari*_*Ari 4 linux bash date filenames rm
如果我有一个文件夹,文件名是它们的创建日期:
2019_04_30.txt
2019_04_15.txt
2019_04_10.txt
2019_02_20.txt
2019_01_05.txt
Run Code Online (Sandbox Code Playgroud)
我将如何将文件名与今天的当前日期进行比较
$ date "+%Y_%m_%d"
>>> 2019_04_30
Run Code Online (Sandbox Code Playgroud)
如果文件名日期大于 30 天,则将其删除。我希望结束
2019_04_30.txt
2019_04_15.txt
2019_04_10.txt
Run Code Online (Sandbox Code Playgroud)
我不必遵循这个命名约定,我可以使用更合适的日期格式。
这是一个bash解决方案。
f30days=$(date +%s --date="-30 days")
for file in 20*.txt; do
fdate=$(echo $file | tr _ -)
fsec=$(date +%s --date=${fdate/.txt/})
if [[ $fsec -lt $f30days ]]; then
echo "rm $file"
fi
done
Run Code Online (Sandbox Code Playgroud)
我以“ echo rm $file”结束它而不是真正删除您的文件,这将测试之前的结果。
与zsh:
zmodload zsh/datetime
strftime -s start '%Y_%m_%d.txt' $((EPOCHSECONDS - 30*86400))
echo -E rm -i 2*.txt(e:'[[ $REPLY > $start ]]':)
Run Code Online (Sandbox Code Playgroud)
echo -E快乐时删除。
在 GNU 系统和 GNU shell ( bash) 上,您可以执行以下操作:
start=$(date -d '30 days ago' +%Y_%m_%d.txt)
list=()
shopt -s nullglob
for file in 2*.txt; do
[[ $file > $start ]] && list+=("$file")
done
if (( ${#list[@]} > 0)); then
echo -E rm -i "${list[@]}"
fi
Run Code Online (Sandbox Code Playgroud)