Bash基于内容删除目录



目前我有多个目录

Directory1 Directory2 Directory3 Directory4

这些目录中的每个目录都包含文件(这些文件有些神秘)

我想做的是扫描文件夹内的文件,看看是否存在某些文件,如果它们存在,那么就离开那个文件夹,如果某些文件不存在,那么就删除整个目录。我的意思是:

我正在搜索包含单词。pass的文件。在文件名中。假设目录4有我要找的文件

Direcotry4:    
file1.temp.pass.exmpl
file1.temp.exmpl
file1.tmp

和其他目录没有这个特定的文件:

file.temp
file.exmp
file.tmp.other

所以我想删除目录1,2和3,但只保留目录4…

到目前为止,我已经想出了这个代码

(arr是一个包含所有目录名的数组)

for x in ${arr[@]}
do
    find $x -type f ! -name "*pass*" -exec rd {} $x;
done

我想到的另一种方法是:

for x in ${arr[@]}
do
    cd $x find . -type f ! -name "*Pass*" | xargs -i rd {} $x/
done

到目前为止,这些似乎不工作,我害怕我可能做错了什么,并有我所有的文件删除.....(我已经备份了)

我有什么办法可以做到这一点吗?记住,我希望目录4保持不变,其中的所有内容都保持

查看您的目录是否包含pass文件:

if [ "" = "$(find directory -iname '*pass*' -type f |  head -n 1)" ]
  then
    echo notfound
  else
    echo found
fi

在循环中这样做:

for x in "${arr[@]}"
  do
      if [ "" = "$(find "$x" -iname '*pass*' -type f |  head -n 1)" ]
        then
          rm -rf "$x"
      fi
  done

试试这个:

# arr is a array of all the directory names
for x in ${arr[@]}
do
ret=$(find "$x" -type f -name "*pass*" -exec echo "0" ;)
# expect zero length $ret value to remove directory
if [ -z "$ret" ]; then
    # remove dir
    rm -rf "$x"
fi
done

相关内容

  • 没有找到相关文章

最新更新