用于复制具有所需名称的文件的脚本

用于复制具有所需名称的文件的脚本

我遇到了一个问题,已经困扰我 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一旦打印输出看起来正确,就删除 。

相关内容