我在Linux系统上,我正在尝试将许多子目录中的所有.jpg文件重命名为顺序文件名,因此每个子目录中的所有jpeg文件都重命名为0001.jpg,0002.jpg等。我有一个'重命名'命令在单个目录中工作:
rename -n 's/.*/sprintf("%04d",$::iter++ +1).".jpg"/e' *.jpg
我试图像这样使用它:
for i in ls -D; do rename -n 's/.*/sprintf("%04d",$::iter++ +1).".jpg"/e' *.jpg; done
但是对于输出我得到了这个:
*.jpg renamed as 0001.jpg
每个子目录的。我做错了什么?
答案 0 :(得分:0)
您需要按顺序将命令放入反引号中(或使用$( ... )
bash语法)
迭代它的输出。还可以将$i
变量与* .jpg文件一起使用
名称模式,例如
for i in `ls -D`
do
rename -n 's/.*/sprintf("%04d",$::iter++ +1).".jpg"/e' $i/*.jpg
done
但是,对于这种情况,您希望迭代所有子目录,而您是 更好地使用find命令:
for i in `find . -type d`; do rename ...
答案 1 :(得分:0)
在我看来,您忘记更改当前工作目录,因此它应该看起来像
for i in *; do
[ -d "$i" ] || continue
pushd "$i"
# rename is here
popd
done