我有很多名为“test”的目录,我想删除它们。
我知道如何找到它们并使用以下方法打印它们:
find . -name test -print
Run Code Online (Sandbox Code Playgroud)
现在,如何删除目录?
请注意,我在目录中也有文件,它们也必须被删除。
Arn*_*anc 87
xargs 做所有的魔法:
find . -name test -type d -print0|xargs -0 rm -r --
Run Code Online (Sandbox Code Playgroud)
xargs 执行作为参数传递的命令,参数传递给 stdin。
这rm -r用于删除目录及其所有子目录。
该--表示的参数的结尾,以避免开始的路径-从被处理作为一个参数。
-print0告诉find打印\0字符而不是换行符;并-0告诉xargs仅将其\0视为参数分隔符。
这是rm一次调用多个目录,避免rm为每个目录单独调用的开销。
作为替代方案,find还可以为每个选定的文件运行一个命令:
find . -name test -type d -exec rm -r {} \;
Run Code Online (Sandbox Code Playgroud)
而这其中,具有更好的性能,因为它会调用rm与一次多个目录:
find . -name test -type d -exec rm -r {} +
Run Code Online (Sandbox Code Playgroud)
(注意+最后的;这个相当于xargs解决方案。)
jay*_*ngh 25
find /path/to/dir -name "test" -type d -delete
Run Code Online (Sandbox Code Playgroud)
-name:查找传递的名称。您可以-regex用于提供基于正则表达式的名称
-type:查找文件类型。d只查找目录
-delete:删除找到的列表的操作。
或者:
find /path/to/dir -name "test" -type d -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)
正如JF Sebastian在评论中所说:
您可以使用+而\;不是一次传递多个目录。
另一种方法是
find . -name test -exec rm -R "{}" \;
Run Code Online (Sandbox Code Playgroud)
关于查找的有用链接:http : //www.softpanorama.info/Tools/Find/using_exec_option_and_xargs_in_find.shtml