bash中for循环和if语句的用法



我使用以下代码,但最后的"echo$dirname"在控制台上给出了空输出

对于CCD_ 1中的文件夹路径;做folder_count=ls -d $folderpath/* | wc -lecho-e";创建文件夹的总日期:$folderpath中的$folder_count;

if [ $folder_count -ne 0 ];
then
for dirpath in `find $folderpath/* -name "2*" `;
do  
dirname=${dirpath##*/}
(( dirname <= 20210106 )) || continue
echo $dirname 

done
fi

完成

首先,我将使用date命令计算3个月前的日期:

# with GNU date (for example on Linux)
mindate=$(date -d -3month +%Y%m%d)
# with BSD date (for example on macOS)
mindate=$(date -v -3m +%Y%m%d)

然后,我将使用shell算术比较来确定要删除的目录:

# for dirpath in "$directory"/*
for dirpath in "$directory"/{20220310,20220304,20220210,20220203,20210403,20210405}
do
dirname=${dirpath##*/}
(( dirname <= mindate )) || continue
echo "$dirpath"
# rm -rf "$dirpath"
done

==不进行通配符匹配。您应该在for语句本身中执行此操作。

也不需要将*放在通配符的开头,因为年份位于目录名的开头,而不是在中间。

for i in "$directory"/202104*; do
if [ -d "$i" ]; then
echo "$i"
rm -rf "$i"
fi
done

if语句有两个用途:

  1. 如果没有匹配的目录,通配符会扩展到它自己(除非您设置了nullglob选项(,并且您将尝试删除这个不存在的目录
  2. 如果存在匹配的文件而不是目录,则会跳过它们

建议使用find命令查找90天前或更早创建的目录。

find . -type d -ctime +90

如果您想查找创建的目录90->100天前。

find . -type d -ctime -100 -ctime +90

一旦你有了正确的文件夹列表。将其输入find /u01/app/SrcFiles/commercial/ngdw/* -name "IQ*"0命令。

rm -rf $(find . -type d -ctime +90)

最新更新