删除不以 -out 结尾的文件

删除不以 -out 结尾的文件

如何删除目录及其子目录中所有不以 -out 结尾的文件?例如删除foo.bar但不删除foo-out.bar

编辑:

我努力了

for a_file in $(find .  ! -name '*-out*'); do rm  $a_file; done;

但是这个脚本不包含空格。我该如何解决这个问题?

答案1

如何使用find命令的内置-delete操作?这应该是空格安全的

find . ! -name '*-out*' -type f -delete

否则,你可以做一个以空字符结尾的 while 循环 - 确保你也引用了 filename 变量

while read -rd $'\0' f; do rm "$f"; done < <(find . ! -name '*-out*' -type f -print0)

答案2

除了答案之外。

您不必使用 for 循环。find提供-exec-delete

快速测试

cd `mktemp -d`
touch {1..9}\ -out{a..c}
$ find . -name '*-out*'
./2 -outb
./8 -outb
./9 -outa
./4 -outc
./6 -outb
./5 -outc
./7 -outb
./9 -outb
./2 -outa
./4 -outa
./8 -outc
./8 -outa
./7 -outc
./3 -outb
./6 -outa
./3 -outa
./1 -outb
./9 -outc
./1 -outa
./5 -outa
./4 -outb
./3 -outc
./1 -outc
./5 -outb
./2 -outc
./7 -outa
./6 -outc

它适用于空格。

你需要的是:

find . ! -name '*-out*' -exec rm -f {} \;

更安全的替代方案:find . -name '*-out*' -exec rm -i {} \;

笔记:使用-exec rm -i {} \;确认删除。

相关内容