【发布时间】:2013-04-24 18:51:21
【问题描述】:
我在一个linux上,并且下载了很多有趣的图片。不幸的是,我留下了一堆重复的名字,比如download (1) 和image.jpeg。我想把它们都改成更有帮助的东西。
有没有办法(最好使用 bash)将所有文件重命名为带有前导零的连续 4 位数字?
例如:
0001
0002
0003
0004
....
【问题讨论】:
我在一个linux上,并且下载了很多有趣的图片。不幸的是,我留下了一堆重复的名字,比如download (1) 和image.jpeg。我想把它们都改成更有帮助的东西。
有没有办法(最好使用 bash)将所有文件重命名为带有前导零的连续 4 位数字?
例如:
0001
0002
0003
0004
....
【问题讨论】:
上一个答案中提供的代码 sn-p 是一种优雅的方法,但拼写错误或 shell 不兼容可能会导致它无法正常运行。
请改用下面的代码。它做同样的事情,但每个快捷方式都明确编写了在循环中调试echo 命令。
counter=1
cd /my/image/directory
for f in $(ls -1)
do
new_filename=$(printf "%04d" ${counter})
echo "renaming ${f} ..to.. ${new_filename}"
mv ${f} ${new_filename}
(( counter=${counter}+1 ))
done
屏幕输出会有点啰嗦。如果您有太多文件,您可能需要使用done 命令将| tee screen.out 添加到行尾。这样你就可以回去查看screen.out中记录的哪个文件发生了什么。
【讨论】:
我创建了my own tool to do this。它还维护文件扩展名,我没有提到,但可能应该包括在内。代码如下:
#!/bin/sh
dir=$1
cd $dir
echo "Renaming all files in $dir."
COUNTER=1
for i in `ls -1`
do
extension=${i##*.}
mv "$i" "$COUNTER.$extension"
echo "$i ==> $COUNTER.$extension"
COUNTER=$(expr $COUNTER + 1 )
done
它不(在撰写本文时)包括前导零,但它可以完成工作。
【讨论】:
ls的输出。
只要你不在乎哪个文件被重命名为什么,这很容易:)
counter=1
for f in *; do
mv "$f" "$( printf "%04d" $((counter++)) )"
done
【讨论】:
尝试将文件夹中所有后缀为 .bash 的文件重命名为后缀为 .sh 的操作很容易完成
rename .bash .sh *.bash
【讨论】: