删除文件,除非名称包含子字符串

删除文件,除非名称包含子字符串

我正在使用以下命令删除文件夹中的文件。但我的命令是删除所有内容。

ionice -c 3 find . -type f -print -delete

如果有后缀,我不想删除文件_y

所以,我的文件夹视图:

123a.jpg -> Should delete
4567.jpg -> Should delete
7644_y.png -> Should not delete
12234_y.jpeg -> Should not delete
5753.jpg -> Should delete

我的命令应该如何实现这一目标?

答案1

根据您的示例,您想要排除名称包含_y 子串

find . -type f ! -name '*_y*' -print -delete

ionice -c 3如果您愿意,可以在前面使用,这与您对 所做的操作无关find。)

如果您只想保留位于_y基本名称末尾的文件(因此12234_y_.jpeg将被删除),您可以使用

find . -type f ! -name '*_y.*' -print -delete

答案2

如果您find专门使用递归子目录,则此答案不适用。但是,如果您只删除当前目录中的文件,则 bash 特定的选项是:

shopt -s extglob
rm -v !(*_y.*)

这具有尝试删除与模式匹配的非文件(目录)的额外限制。

相关内容