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)
记住,你试试这个之前,先来备份find和rm命令.
使用这个find:
find . -name "*.foo" -execdir bash -c '[[ -f "${1%.*}.bar" ]] && rm "$1"' - '{}' \;
Run Code Online (Sandbox Code Playgroud)