使用shell脚本重命名多个文件



我已经将不同s3存储桶中的多个文件下载到了linux vm上的一个文件夹中。在将目录中的*.gz文件移动到客户端的sftp服务器(现有进程)之前,我只想重命名它们,最好是按顺序,使用脚本重命名为FILE001_$(date '+%Y%m%d').csv.gzFILE002_$(date '+%Y%m%d').csv.gz等文件。

我尝试使用另一篇文章中的find . -name "*.csv.gz" -exec mv {} FILE%03d_$(date '+%Y%m%d').csv.gz,但出现missing argument to -exec错误。有没有使用renamemv执行上述任务的例子?

试试这样的东西:

#! /bin/bash
declare -i i=0
for f in *.csv.gz; do
: $((i++))
mv "$f" "$(printf "FILE%03d_%s.csv.gz" $i "$(date +%Y%m%d)")"
done

您可以将文件的名称传递到脚本中。在这种情况下,您必须使用dirname来获取每个文件的目录名。

#! /bin/bash
declare -i i=0
for f in "$@"; do
: $((i++))
mv "$f" "$(dirname "$f")"/"$(printf "FILE%03d_%s.csv.gz" $i "$(date +%Y%m%d)")"
done

示例:

$ mkdir {1,2,3}
$ touch {1,2,3}/{a,b,c}.csv.gz
$ ./rename.sh {1,2,3}/*.csv.gz
$ ls {1,2,3}
1:
FILE001_20211012.csv.gz  FILE002_20211012.csv.gz  FILE003_20211012.csv.gz
2:
FILE004_20211012.csv.gz  FILE005_20211012.csv.gz  FILE006_20211012.csv.gz
3:
FILE007_20211012.csv.gz  FILE008_20211012.csv.gz  FILE009_20211012.csv.gz

最新更新