在我的Linux系统中,我有从data 001到data 100的100个目录,我希望我的bash脚本根据目录名用不同的扩展名重命名所有数据文件。例如,data 001目录中的文件应重命名为 *001.txt和 *001.nc,data 002目录中的文件应重命名为 *002.txt和 *002.nc,依此类推。我有一个bash脚本来完成这项工作,但是当我尝试重新运行该脚本时,它重复了名称,例如data 001- *001001.txt *001_001.nc。我想确保如果我重新运行脚本,它的代码不会影响命名格式。
#!/bin/bash
for ((ii=1; ii<=100; ii++))
do
dirname=$(printf "data%03d" $ii)
for file in $dirname/*
do
filename=$(basename "$file")
extension="${filename##*.}"
filename_without_ext="${filename%.*}"
newname=$(printf "%s_%03d.%s" "$filename_without_ext" $ii "$extension")
# Skip if the file is already in the desired format
if [[ "$filename_without_ext" != *"_${ii}" ]]; then
mv "$file" "$dirname/$newname"
fi
done
done
1条答案
按热度按时间px9o7tmv1#
*"_${ii}"
的字符串插值不会以您期望的方式生成后缀。但我想您希望
_003
用于格式比较。我建议您事先准备好预期格式的
suffix
,然后在整个脚本中使用它。