我有一系列文件始终以至少 5 个数值开头,例如:
85966_88.jpg
通过这个答案我了解到在命令中使用 find 和 regextype 来删除这样的文件:
find . -regextype posix-extended -iregex './a_[0-9]{6}' -execdir bash -c '[[ ${1##./a_} > 000750 ]] && echo $1' "removing: " {} \;
我修改了这个命令来满足我的需要,如下所示:
find . -regextype posix-extended -iregex './[0-9]{5}' -execdir bash -c '[[ ${1##./} > 000001 ]] && echo $1' "removing: " {} \;
我执行了命令,但它没有删除文件。我不知道如何删除前 5 位数字为数字的所有 .jpg,然后 _
答案1
首先,命令如书面不会删除任何内容:正如您链接的答案中所述
用命令测试一下
echo
,一旦您确定它列出了正确的文件,rm
就可以使用。
其次,对于您的情况来说,这太复杂了,因为您不想将删除限制在匹配的范围或子集内(因此您不需要 shell 测试) - 您可以简单地这样做
find -regextype egrep -regex '.*/[0-9]{5}_.*\.jpg' -print
(进行测试)并-print
在-delete
您满意其正常工作后进行替换。
然而即使正则表达式看起来过于复杂 - 一个简单的全局匹配实际上可以减少输入:
find -name '[0-9][0-9][0-9][0-9][0-9]_*.jpg' -print
(再次,当您确定时请替换-print
为)。-delete
如果你不需要递归搜索,一个简单的 shell glob 就可以工作:
rm -i [0-9][0-9][0-9][0-9][0-9]_*.jpg