我有folderA
一些文件,其数字序列以 开头a_000000
。我想要做的是从特定数字开始删除文件:比如说,a_000750
直到这个 中的文件末尾folderA
。有人能建议如何使用 shell 脚本来做到这一点吗?
答案1
假设你知道或可以猜出范围的末尾,你可以使用括号扩展:
rm a_{000750..000850}
上述命令将删除 a_000750 和 a_000850 之间的 101 个文件(并抱怨文件名引用了不存在的文件)。如果您有太多文件,请使用find
:
find . -name 'a_*' | while read -r file; do
[ "${file#./a_}" -gt 000749 ] && rm -v "$file"
done
这里,find
只是列出了所有匹配 的文件a_*
。列表被传递给一个while
循环,每个文件名都被读入变量$file
。然后,使用 bash 的字符串操作功能,如果数字部分(find 将文件打印为./file
,因此${file#./a_}
仅打印数字)大于000750
或等于 ,则文件被删除。-v
只是为了让您看到删除了哪些文件。
请注意,以上内容假设文件名是合理的。如果您的文件名可以包含空格、换行符或其他奇怪字符,请改用以下方法:
find . -name 'a_*' -print0 | while IFS= read -rd '' file; do
[ "${file#./a_}" -gt 000749 ] && rm -v "$file"
done
答案2
你可以做这样的事情:
find . -regextype posix-extended -iregex './a_[0-9]{6}' -execdir bash -c '[[ ${1##./a_} > 000750 ]] && echo $1' "removing: " {} \;
或者:
find . -regextype posix-extended -iregex './a_[0-9]{6}' | sort | sed '0,/000750/d' | xargs echo
第一种方法假设一个固定的前缀,将其剥离并检查其值。
第二种方法假设一个固定长度的后缀(和一个公共的固定前缀)并依赖于这个事实;并且,虽然按字典顺序201
排列在 之前31
,但它并不在 之前031
。
用命令测试一下echo
,一旦您确定它列出了正确的文件,rm
就可以使用。
答案3
在 Bash 中你可以运行:
for i in {1001..3000} ; do rm file_"$i".dat ; done
答案4
简单来说
rm partialfilename* -f
在你的例子中
rm a_00075* -f