如果已经回答了这个问题,我真的很抱歉 - 我找不到它。
我有一个大约有一个目录。35000 个文件。每个文件有两个副本。它们都是按顺序命名的,如下所示:
0000001、0000002 等
在上面的示例中,原始文件将命名为 1、4、7、10 等。
如何删除除原件以外的所有文件?
如果已经回答了这个问题,我真的很抱歉 - 我找不到它。
我有一个大约有一个目录。35000 个文件。每个文件有两个副本。它们都是按顺序命名的,如下所示:
0000001、0000002 等
在上面的示例中,原始文件将命名为 1、4、7、10 等。
如何删除除原件以外的所有文件?
据我了解,Mac 终端使用 bash 作为外壳。以下 shell 命令将删除您想要的文件(除 1、4、7、10 等之外的所有文件):我假设文件编号为 000number.ext
shopt -s extglob; for file in [0-9]*; do number=${file%%.ext}; number=${number##+(0)}; if ((number%3 != 1)); then rm $file; fi; done
一些评论:${file%%.ext}
使用特殊的 bash 语法从文件中删除扩展名以从字符串中删除后缀。如果您的文件没有扩展名,则应删除此命令。
${number##+(0)}
从数字中删除前导零(否则数字将被外壳视为八进制)。这需要设置 extglob 选项(因为shopt -s extglob
在主脚本之前)。
((number%3 != 1))
仅对数字 1、4、7、10 为真(除以 3 时余数为 1)。
我建议您先检查 usingecho
而不是rm
在使用 rm 运行它之前检查以确保一切都按预期进行。