目前我有多个目录
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