我需要你的帮助。
我有一个巨大的目录,里面有成千上万的文件,我试图用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
。