在unix服务器上,我试图弄清楚如何从以v0开头的任何子目录中删除文件,例如" example.xls"(" v0 *& #34)。
我尝试过类似的事情:
find . -name "v0*" -type d -exec find . -name "example.xls" -type f
-exec rm {} \;
但我得到错误。我有一个解决方案,但它运行得很好,即它将删除任何子目录中的文件,无论它的名称如何:
find . -type f -name "example.xls" -exec rm -f {} \;
有什么想法吗?
答案 0 :(得分:2)
您可能需要分两步完成 - 即首先找到目录,然后找到文件 - 您可以使用xargs
将其设置为一行,例如
find . -name "v0*" -type d | \
xargs -l -I[] \
find [] -name "example.xls" -type f -exec rm {} \;
它的作用是,首先生成一个可行的目录名列表,然后让xargs调用第二个find,其中包含在该目录中定位文件名的名称
答案 1 :(得分:2)
尝试:
find -path '*/v0*/example.xls' -delete
这仅匹配名为example.xls
的文件,该文件在其路径中的某个位置具有以v0
开头的父目录名。
请注意,由于find
提供-delete
作为操作,因此无需调用外部可执行文件rm
。
考虑这个目录结构:
$ find .
.
./a
./a/example.xls
./a/v0
./a/v0/b
./a/v0/b/example.xls
./a/v0/example.xls
我们可以识别名为example.xls
的父目录之一的文件v0*
:
$ find -path '*/v0*/example.xls'
./a/v0/b/example.xls
./a/v0/example.xls
要删除这些文件:
find -path '*/v0*/example.xls' -delete
v0*
find -regex '.*/v0[^/]*/example.xls'
使用上述目录结构,此方法返回一个文件:
$ find -regex '.*/v0[^/]*/example.xls'
./a/v0/example.xls
删除此类文件:
find -regex '.*/v0[^/]*/example.xls' -delete