【发布时间】:2010-09-19 21:26:45
【问题描述】:
我正在编写一个脚本来删除一些超过 1 周的构建工件。
文件的名称格式为 artifact-1.1-200810391018.exe。
如何仅删除超过 1 周的文件,不包括日期时间戳末尾的小时和分钟时间?
目前它正在删除目录中的所有文件。
#!/bin/sh
NIGHTLY_LOCATIONS=( "/foo" "/bar" )
ARTIFACT_PREFIX="artifact-*-"
NUM_TO_KEEP=7
for home in $(seq 0 $((${#NIGHTLY_LOCATIONS[@]} - 1))); do
echo "Removing artifacts for" ${NIGHTLY_LOCATIONS[$location]}
for file in `find ${NIGHTLY_LOCATIONS[$location]} -name "$ARTIFACT_PREFIX*"`; do
keep=true
for day in $(seq 0 $((${NUM_TO_KEEP} - 1))); do
date=`date --date="$day days ago" +%Y%m%d`
echo $(basename $file ".exe") " = " $ARTIFACT_PREFIX$date
if [ "$(basename $file ".exe")" != "$ARTIFACT_PREFIX$date" ]; then
keep=false
fi
done
if [ !$keep ]; then
echo "Removing file"
rm -f $file
fi
done done
【问题讨论】:
-
我喜欢 VonC 的回答,但以防万一,您是否有理由不能依赖文件系统日期而必须使用文件名中嵌入的时间?