我使用以下代码,但最后的"echo$dirname"在控制台上给出了空输出
对于CCD_ 1中的文件夹路径;做folder_count=ls -d $folderpath/* | wc -l
echo-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
语句有两个用途:
- 如果没有匹配的目录,通配符会扩展到它自己(除非您设置了
nullglob
选项(,并且您将尝试删除这个不存在的目录 - 如果存在匹配的文件而不是目录,则会跳过它们
建议使用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)