查找按年和月进行的命令迭代



我需要你的帮助。

我有一个巨大的目录,里面有成千上万的文件,我试图用find命令按年和月分组,然后tar它以节省一些空间。

我创建了一个bash脚本,如下所示

#!/bin/bash
DIR=/data/historical
/usr/bin/cd  /data/backupfile
sleep 2
[ -e "$DIR" ] || mkdir "$DIR"
sleep 2

for year in 2019 2020 2021 2022
do 
for month in jan feb mar apr may jun jul aug sept oct nov dec
do 
mkdir -p /data/historical/"$year"/"$month" 
done

for prev feb mar apr may jun jul aug sept oct nov dec jan 
do 
/usr/bin/find ! -newermt "$prev 31 $year"  -newermt  "$month 1 $year"  -exec mv {} /data/historical/"$month" ;
done

done

也试过这个方法

years=2019,2020,2021,2022
months=01,02,03,04,05,06,07,08,09,10,11,12
#months=`date '+%b'`
#after=`date -d '1 month' '+%b'`
for year in $(echo ${years})
do
for month in "${months[@]}"
do

/usr/bin/find ! -newermt "$year-$month-31" -newermt "$year-$month-01" -exec mv {} /data/historical/"$month" ;
done
done

所以,这是我真正需要的。我需要迭代从2019开始的每一年(2019 2020 2021 2022)和从01开始的每个月(01、02、03、04、05、06、07、08、09、10、11、12)……12、获取按月/年分组的文件,然后对其进行tar,然后它们在另一年(例如2020年)中不断迭代。

例如:

/usr/bin/找到!- 2019年2月29日- 2019年1月1日"-exec mv {}/data/historical/2019;,,/usr/bin/tar -czf/data/historical/file.tar.gz/data/historical/2019

我试过改变变量,玩迭代和循环,嵌套循环。目录2019/{jan…dec}已经创建,但是我要搜索的文件和按月份和年份分组的文件不在那里。

#编辑

帮助你更好地理解:

我的大文件是/data/backupfile

包含2019-2022年的文件

我想按年/月对这些文件进行分组,这就是为什么我试图创建目录2019/Jan,并从/data/backupfile中获取这些Jan -2019, feb-2019等文件。

我一直在尝试使用嵌套循环来做到这一点。也许有更好的解决办法?

如果您安装了GNU findutils,应该可以正常工作:

cd /data/backupfile
find -type f -printf '%p/%TY/%Tb' |
xargs -0 sh -c '
for args; do
src=${args%/*/*}
dst=/data/historical${args#"$src"}
echo mkdir -p "$dst" &&
echo mv "$src" "$dst"
done' sh

如果您对输出满意,请删除两个echo

相关内容

  • 没有找到相关文章

最新更新