Answers:
xargs 做所有的魔术:
find . -name test -type d -print0|xargs -0 rm -r --
xargs 执行作为参数传递的命令,并将参数传递给stdin。
这rm -r用于删除目录及其所有子目录。
该--表示的参数的结尾,以避免开始的路径-从被处理作为一个参数。
-print0告诉find打印\0字符而不是换行符;并-0告知xargs仅将其\0视为参数分隔符。
这一次可以调用rm多个目录,避免了rm为每个目录分别调用的开销。
或者,find也可以为每个选定的文件运行命令:
find . -name test -type d -exec rm -r {} \;
而这其中,具有更好的性能,因为它会调用rm与一次多个目录:
find . -name test -type d -exec rm -r {} +
(请注意+最后的“;”等效于xargs解决方案。)
xargs命令运行良好。
find /path/to/dir -name "test" -type d -delete
-name:查找传递的名称。您可以-regex根据正则表达式提供名称
-type:查找文件类型。d只寻找目录
-delete:删除找到的列表的动作。
或者:
find /path/to/dir -name "test" -type d -exec rm -rf {} \;
正如塞巴斯蒂安(JF Sebastian)在评论中指出的那样:
您可以使用+而\;不是一次传递多个目录。
+而\;不是一次传递多个目录。
还有另一种方法是
find . -name test -exec rm -R "{}" \;
有关查找的有用链接:http : //www.softpanorama.info/Tools/Find/using_exec_option_and_xargs_in_find.shtml
另一个答案指出,您可以尝试查找所有名称相同的目录并将其test删除
find -name "test" -type d -delete
我在Mac上遇到了一些与交叉兼容性有关的问题,因此我使用了以下等效命令:
find -path "*/test" -type d -delete
但是,在任何一种情况下,如果任何目录中test都包含文件,find将会抱怨Directory is not empty,并且将无法删除该目录。
如果您打算删除包括test目录在内的所有文件,那么我们可以使用相同的技巧来删除名为testfirst 的目录内的所有文件。
find -path "*/test/*" -delete
模式:"*/test/*"将确保我们仅删除名为的目录中的文件/test/。一旦目录为空,我们就可以使用第一个命令删除目录:
find -path "*/test" -type d -delete
例:
$ tree
.
├── mytest
│ └── test
│ └── blah.txt
├── test
│ ├── bar.jpg
│ └── dir
│ └── bar.bak
└── testdir
└── baz.c
5 directories, 4 files
$ find -path "*/test" -type d -delete
$ tree
.
├── mytest
│ └── test
├── test
└── testdir
└── baz.c
4 directories, 1 file
$ find -name "test" -type d -delete
$ tree
.
├── mytest
└── testdir
└── baz.c
2 directories, 1 file
+在查找中。我不知道,绝对希望我早就知道。