我正在寻找一种执行命令的方法,我只能在子目录下执行某些命令,而命令不会影响当前目录。
find -name ":RUN" -exec rm -rf {} \;
如果我得到的目录名称是 ,level0
其子目录名称是level1
。我在目录中运行上面的示例命令,level0
然后不仅是level1
目录,而且还level0
受命令影响。
如何处理该命令仅影响执行level1
时的目录level0
?
答案1
当你说
寻找 -某物 ……你实际上是在说
寻找 。 -某物 ……即,搜索开始于
.
(当前目录)。您只想在子目录中搜索,所以也可以寻找 ./*/-name ":RUN" -exec rm -rf {} ;这将找不到名称为首先
.
。如果您想包含此类目录,并且您正在使用 bash,请先执行此操作shopt -s dotglob
。
PS 天真的,find */ -…
相当于find ./*/ -…
../*/
如果存在名称开头的文件,则使用更安全-
。
答案2
尝试:
find . -path './*/*' -type d -name ':RUN' -exec echo rm -rf -- {} +
您也可以替换-path './*/*'
为等效的-mindepth 2
.