我正在尝试使用for循环和mv命令重命名多个文件。
从:
ATEST1.012345
AZEST2.098765
AZEST3.120565
收件人:
atest1.012345_0619
azest2.098765_0619
azest3.120565_0619
这是我尝试过的:
#!/bin/bash
DIR=$1
for file in $DIR/ATEST1.??????
do
mv "$file" "${file%}_$(date +%m%y)"
done
for file in $DIR/AZEST2.??????
do
mv "$file" "${file%}_$(date +%m%y)"
done
for file in $DIR/AZEST3.??????
do
mv "$file" "${file%}_$(date +%m%y)"
done
结果是:ATEST1.12345_0619,AZEST2.098765_0619,AZEST3.120565_0619。
我不确定如何将数字保留在中间并仅更改字母并添加_MMYY日期。
答案 0 :(得分:1)
我会尝试
cd "$DIR" && find . -name "ATEST*" -o -name "AZEST*" | \
while read file;
do mv "$file" "$(echo $file | tr [[:upper:]] [[:lower:]])_$(date +%m%y)";
done
我建议使用echo
代替mv
进行某种空试
答案 1 :(得分:0)
使用GNU sed
,您可以使用\L
从大写切换为小写:
DIR=$1
for f in $DIR/ATEST1.??????; do
mv $f $(sed "s/.*/\L&_$(date +%m%y)/" <<< "$f")
done
答案 2 :(得分:0)
rename命令允许您进行批量文件重命名。
rename 'y/A-Z/a-z/; s/(.*)$/$1_0619/' A*
您可以使用-n
标志在空运行模式下执行。
答案 3 :(得分:0)
使用tr:
for f in $DIR/ATEST1.??????
do
mv "$f" $(tr '[[:upper:]]' '[[:lower:]]' <<< "$f")_$(date +%m%y)
done