我经常调用以下脚本
清理.sh
#!/bin/bash
DEFAULT_LIMIT=10
INPUT=$1
PATTERN=$2
LIMIT=$3
if [ "$INPUT" == "" ] || [ "$PATTERN" == "" ]
then
echo "usage: $0 INPUT PATTERN [LIMIT]"
exit 1;
fi
if [ "$LIMIT" == "" ]
then
LIMIT=$DEFAULT_LIMIT
fi
find /var/project/project1 -maxdepth 1 -type d -name "${INPUT}-${PATTERN}*" -printf '%T@ %p\n'|sort -nr|tail -n+$LIMIT|cut -f 2- -d " "|xargs -i rm -rf {}
所以这个应该删除最后一个但$LIMIT
带有前缀的目录$INPUT-$PATTERN
from/var/project/project1
并且很少出乎意料地(尽管非常重要)它会删除除预期目录之外的目录 from /var/project/project1
。知道为什么吗?cut 的行为是否为 2- 定义良好?我们可以在 f 和 field# 之间有空格吗?这不是故意编写的,而是一个错误,但不太确定这段代码是否是导致此意外删除的代码。
这很少能重现,因此不确定修复这个(cut -f2 -d " "
)是否能解决我的问题