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
目录在内的所有文件,那么我们可以使用相同的技巧来删除名为test
first 的目录内的所有文件。
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
+
在查找中。我不知道,绝对希望我早就知道。