【问题标题】:Rename all files in a folder重命名文件夹中的所有文件
【发布时间】:2013-04-24 18:51:21
【问题描述】:

我在一个linux上,并且下载了很多有趣的图片。不幸的是,我留下了一堆重复的名字,比如download (1)image.jpeg。我想把它们都改成更有帮助的东西。

有没有办法(最好使用 bash)将所有文件重命名为带有前导零的连续 4 位数字?

例如:

0001
0002
0003
0004
....

【问题讨论】:

    标签: linux bash file rename


    【解决方案1】:

    上一个答案中提供的代码 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中记录的哪个文件发生了什么。

    【讨论】:

    • 不要使用这个!它将删除所有文件,因为计数器没有改变。
    【解决方案2】:

    我创建了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的输出。
    【解决方案3】:

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

    counter=1
    for f in *; do
        mv "$f" "$( printf "%04d" $((counter++)) )"
    done
    

    【讨论】:

    • 所以...现在有一张图片名称为 0001,仅此而已。
    【解决方案4】:

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

    rename .bash .sh *.bash
    

    【讨论】:

    • 这不会作为问题请求添加序列号。
    猜你喜欢
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 2013-06-20
    • 2015-10-20
    • 1970-01-01
    相关资源
    最近更新 更多