将序列重命名为新序列

时间:2014-03-28 10:47:58

标签: linux bash file sequence rename

我在目录中有文件需要使用bash脚本重命名。 Bellow你看到文件的旧名称和新文件名必须是什么。

OLDNAME - > NEWNAME
FILE71 - > 001
FILE72 - > 002
FILE73 - > 003
FILE74 - > 004
FILE75 - > 005
FILE76 - > 006
FILE77 - > 007
FILE78 - > 008
FILE79 - > 009
FILE80 - > 010

OLDNAME和NEWNAME应该与示例中的一样精确,因此: 旧文件名FILE73必须成为新文件名003,FILE74必须为004且FILE80必须为010

提前致谢!

3 个答案:

答案 0 :(得分:9)

你走了:

#!/bin/bash
mv FILE71 001
mv FILE72 002
mv FILE73 003
mv FILE74 004
mv FILE75 005
mv FILE76 006
mv FILE77 007
mv FILE78 008
mv FILE79 009
mv FILE80 010

答案 1 :(得分:0)

运行简单for..loop并完成

#!/bin/bash
files=$(find mypath -maxdepth 1 -type f | sort -u)
a=1
for i in $files; do
  new=$(printf "%03d" ${a}) 
  mv ${i} mypath/${new}
  let a=a+1
done

答案 2 :(得分:0)

以下是@MarkSetchell脚本

的另一种变体
#!/bin/bash
while read orig new
do
    echo mv "$orig" "$new"
done <<EOF
FILE71 001
FILE72 002
FILE73 003
FILE74 004
FILE75 005
FILE76 006
FILE77 007
FILE78 008
FILE79 009
FILE80 010
EOF

或者你可以尝试

join -o"1.2 2.2" \
    <(find . -maxdepth 1 -name FILE\* -print|cat -n) \
    <(seq -f "%03g" 1000|cat -n) |\
    xargs -n2 echo

你需要用另一个命令替换echo - 这取决于你......;)