我正在Linux上工作,并且有一个文件夹,其中包含许多子目录。我需要删除所有具有相同名称的子目录。例如,
dir
|---subdir1
|---subdir2
| |-----subdir1
|---file
我要删除全部subdir1
。这是我的脚本:
find dir -type d -name "subdir1" | while read directory ; do
rm -rf $directory
done
但是,我执行了它,但是似乎什么也没发生。
我也尝试过find dir -type d "subdir1" -delete
,但仍然没有任何反应。
如果find
根本找不到正确的目录,则它们应该起作用:
find dir -type d -name "subdir1" -exec echo rm -rf {} \;
要么
find dir -type d -name "subdir1" -exec echo rm -rf {} +
(echo
用于验证命令是否命中了所需的文件,将其删除以实际运行rm
并删除目录。)
这两个管道来xargs
和while read
有缺点不寻常的文件名会导致一些问题。另外,find -delete
将仅尝试删除目录本身,而不删除其内容。它在所有非空目录上都将失败(但是您至少应该得到错误)。
使用时xargs
,默认情况下用空格分隔单词,因此即使文件名带有空格也将不起作用。read
可以处理空格,但是在您的命令中$tar
,将变量拆分为空格的是未引用的扩展名。
如果您的文件名没有换行符或尾随空格,这也应该起作用:
find ... | while read -r x ; do rm -rf "$x" ; done
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句