我必须制作一个 bash 脚本,对超过 60 天的文件执行 gzip,并将其移动到一个子目录中,该子目录的名称是文件名的开头。这是我必须使用的文件的示例:
-rw-r--r-- 1 X X 0 2012-10-15 11:19 glux21-x1.csv
-rw-r--r-- 1 X X 0 2012-10-15 11:19 GLUX21-x34.csv
-rw-r--r-- 1 X X 0 2012-10-15 11:19 glux226.csv
-rw-r--r-- 1 X X 0 2012-10-15 11:19 glux228.csv
-rw-r--r-- 1 X X 0 2012-10-15 11:19 glux230.csv
-rw-r--r-- 1 X X 0 2012-10-15 11:19 glux232.csv
-rw-r--r-- 1 X X 0 2012-10-15 11:19 glux234.csv
-rw-r--r-- 1 X X 0 2012-10-15 11:19 glux236.csv
-rw-r--r-- 1 X X 0 2012-10-15 11:19 glux255.csv
因此,例如,glux21-x1.csv 应该被 gzip 压缩并移动到 glux21 子目录中,就像 GLUX21-x34.csv 文件一样。 glux255.csv 应位于 glux255 子目录中。
答案1
find . -ctime -60 -maxdepth 1 -type f | while IFS= read x
do
gzip -9 "$x" # compress it
D=${x%%.csv}
D=${D/-*/} # remove suffix and everything after the -
mkdir -p "$D" # create dest sub folder
mv $x.gz "$D" # move it
done
这将处理您需要的所有文件,并将它们分别放入不同的子文件夹中。