1

I'm on a linux, and a download a lot of funny pictures. Unfortunately, I'm left with a bunch of duplicate names like download (1) and image.jpeg. I would like to change them all to something a bit more helpful.

Is there a way to (preferably using bash) to rename all files to sequential 4 digit numbers with leading zeroes?

Eg:

0001
0002
0003
0004
....
4

4 回答 4

3

上一个答案中提供的代码片段是一种优雅的方式,但拼写错误或外壳不兼容可能会导致它无法正常运行。

请改用下面的代码。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

屏幕输出会有点啰嗦。如果你有太多文件,你可能想| tee screen.out用命令添加到行尾done。这样您就可以回去查看screen.out中记录的哪个文件发生了什么。

于 2013-04-30T19:23:22.907 回答
1

我创建了自己的工具来执行此操作。它还维护文件扩展名,我没有提到,但可能应该包括在内。这是代码:

#!/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

它不(在撰写本文时)包括前导零,但它完成了工作。

于 2013-05-20T04:27:23.297 回答
-1

尝试将文件夹中所有后缀为 .bash 的文件重命名为后缀为 .sh 很容易完成

rename .bash .sh *.bash
于 2014-06-25T12:53:59.980 回答
-1

只要您不在乎哪个文件被重命名为什么,这很容易:)

counter=1
for f in *; do
    mv "$f" "$( printf "%04d" $((counter++)) )"
done
于 2013-04-30T19:03:51.587 回答