我在一个目录中有文件,我需要用bash脚本重命名。下面是文件的旧名称和新文件名。
OLDNAME -> NEWNAME
FILE71 -> 001
FILE72 -> 002
fil73 -> 003
FILE74 -> 004
FILE75 -> 005
FILE76 -> 006
FILE77 -> 007
FILE78 -> 008
FILE79 -> 009
FILE80 -> 010
OLDNAME和NEWNAME应该和示例中一样精确,所以:
旧文件名FILE73必须改为新文件名003,FILE74必须改为004,FILE80必须改为010提前感谢!
给你:
#!/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
这是@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
-这取决于你…div;)
运行简单的for..loop
和done
#!/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