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

Renaming multiple files using shell script

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

我尝试使用另一个 post 的 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