使用 shell 脚本重命名多个文件
Renaming multiple files using shell script
我已将多个文件从不同的 s3 存储桶下载到 linux 虚拟机上的一个文件夹中。我只想重命名目录中的 *.gz
文件,最好按顺序重命名,在将它们移动到客户端的 sftp 服务器(现有进程)之前,使用脚本将它们重命名为 FILE001_$(date '+%Y%m%d').csv.gz
、FILE002_$(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
错误。请使用 rename
或 mv
完成上述任务的任何示例?
尝试这样的事情:
#! /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
我已将多个文件从不同的 s3 存储桶下载到 linux 虚拟机上的一个文件夹中。我只想重命名目录中的 *.gz
文件,最好按顺序重命名,在将它们移动到客户端的 sftp 服务器(现有进程)之前,使用脚本将它们重命名为 FILE001_$(date '+%Y%m%d').csv.gz
、FILE002_$(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
错误。请使用 rename
或 mv
完成上述任务的任何示例?
尝试这样的事情:
#! /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