我遇到了一个问题,已经困扰我 6-7 个小时了,我却无法克服,这就是为什么我请求您的帮助。我需要创建一个 bash 脚本,它可以访问一个文件夹,并使用新名称重命名其中的所有文件,后跟一个代表字母层次结构的数字和一个新的扩展名。
参数按以下顺序排列:(
新名称、新扩展名和我正在搜索的文件夹)。
例如:./rename.sh work .txt Documents
假设最初文档(Documents)包含:
a.txt
b.txt
c.txt
因此,运行脚本后,文档将包含以下内容:work01.txt(来自 a.txt)
work02.txt(来自 b.txt)
work03.txt(来自 c.txt)
问题是我不知怎么地复制了文件,造成了很大的混乱。以下是脚本 (rename.sh):
#!/bin/bash
if [ -z "$3" ]
then
echo "No argumets supplied"
else
mic="0"
i="1"
max="9"
for file in `ls $3 | sort -V`; do
if ( test $i -le 9)
then
cp $3/$file $3/$1$mic$i.$2
rm -r $3/$file
else
if ( test $i -ge 9 )
then
cp $3/$file $3/$1$i.$2
rm -r $3/$file
fi
fi
i=$((i+1))
done
echo "$max"
fi
答案1
如果您的文件名为 a.txt、b.txt 等,则默认排序顺序应允许您进行简单的文件名全局扩展,而不需要明确对文件进行版本排序。因此,我建议做类似的事情
i=1
cd "$dir"
for old in *."$ext"; do
printf -v new '%s%02d.%s' "$newbase" $((i++)) "$ext"
echo mv "$old" "$new"
done
在分配newbase="$1"
、ext="$2"
、之后dir="$3"
(当然要进行适当的存在性检查)。 试一试,echo
一旦打印输出看起来正确,就删除 。