如何删除给定范围内的编号文件?

如何删除给定范围内的编号文件?

我有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

相关内容