递归删除所有带有"*.bar"文件的"*.foo"文件

knp*_*wrs 5 unix bash recursion zsh

如何以递归方式删除所有.foo具有同名兄弟文件但以.bar?结尾的文件?例如,请考虑以下目录树:

.
??? dir
?   ??? dir
?   ?   ??? file4.bar
?   ?   ??? file4.foo
?   ?   ??? file5.foo
?   ??? file2.foo
?   ??? file3.bar
?   ??? file3.foo
??? file1.bar
??? file1.foo
Run Code Online (Sandbox Code Playgroud)

在这个例子中file.foo,由于存在兄弟文件file3.foo,因此file4.foo将被删除file{1,3,4}.bar.file{2,5}.foo应该留下这个结果:

.
??? dir
?   ??? dir
?   ?   ??? file4.bar
?   ?   ??? file5.foo
?   ??? file2.foo
?   ??? file3.bar
??? file1.bar
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 6

记住,你试试这个之前,先来备份findrm命令.

使用这个find:

find . -name "*.foo" -execdir bash -c '[[ -f "${1%.*}.bar" ]] && rm "$1"' - '{}' \;
Run Code Online (Sandbox Code Playgroud)