如何在终端(LINUX)中重命名多个文件?

时间:2014-02-04 00:57:26

标签: linux file terminal pattern-matching rename

我的目录中有一堆文件名完全没有图案。我所知道的是它们都是Jpg文件。如何重命名它们,以便它们的名称会有某种顺序。

我知道在Windows中,您只需选择所有文件并将它们全部重命名为相同的名称,Windows操作系统会自动添加序列号以补偿相同的文件名。

我希望能够在Linux Fedora中做到这一点,但我只能在终端中做到这一点。请帮忙。我迷路了。

执行此操作的命令是什么?

4 个答案:

答案 0 :(得分:6)

执行此操作的最佳方法是在终端中运行一个循环,从一个图片到另一个图片,并使用每个循环变大一个的数字重命名它们。

你可以这样做:

n=1
for i in *.jpg; do
    p=$(printf "%04d.jpg" ${n})
    mv ${i} ${p}
    let n=n+1
done

只需逐行输入终端。

如果您想在数字前加上自定义名称,可以将其放在第三行的百分号之前。

如果你想改变名字编号中的位数,只需要替换第三行中的'4'(不要改变'0')。

答案 1 :(得分:1)

我会假设:

  • 文件名中没有空格或其他奇怪的控制字符
  • 给定目录中的所有文件都是jpeg文件

考虑到这一点,要将所有文件重命名为1.jpg,2.jpg等等:

N=1
for a in ./* ; do
    mv $a ${N}.jpg
    N=$(( $N + 1 ))
done

如果文件名中有空格:

find . -type f | awk 'BEGIN{N=1}
    {print "mv \"" $0 "\" " N ".jpg"
     N++}' | sh

应该能够重命名它们。

关键是,Linux / UNIX确实有很多工具可以自动执行这样的任务,但是它们有一点学习曲线

答案 2 :(得分:1)

创建一个包含以下内容的脚本:

#!/bin/sh

filePrefix="$1"
sequence=1

for file in $(ls -tr *.jpg) ; do
    renamedFile="$filePrefix$sequence.jpg"
    echo $renamedFile
    currentFile="$(echo $file)"
    echo "renaming \"$currentFile\" to $renamedFile"
    mv "$currentFile" "$renamedFile"
    sequence=$(($sequence+1))
done
exit 0

如果您为脚本命名,例如,RenameSequentially,那么您可以发出命令:

./重命名序列图像 -

这会将目录中的所有* .jpg文件重命名为Image-1.jpg,Image-2.jpg等...按照从最旧到最新的顺序...在OS X命令shell中测试。

答案 3 :(得分:0)

我写了一个perl脚本很久时间以前做了你想做的事情:

#
# reseq.pl    renames files to a new named sequence of filesnames
#
# Usage: reseq.pl newname [-n seq] [-p pad] fileglob
#
use strict;
my $newname = $ARGV[0];
my $seqstr = "01";
my $seq = 1;
my $pad = 2;

shift @ARGV;

if ($ARGV[0] eq "-n") {
    $seqstr = $ARGV[1];
    $seq = int $seqstr;
    shift @ARGV;
    shift @ARGV;
}

if ($ARGV[0] eq "-p") {
    $pad = $ARGV[1];
    shift @ARGV;
    shift @ARGV;
}

my $filename;
my $suffix;

for (@ARGV) {
    $filename = sprintf("${newname}_%0${pad}d", $seq);
    if (($suffix) = m/.*\.(.*)/) {
        $filename = "$filename.$suffix";
    }
    print "$_ -> $filename\n";
    rename ($_, $filename);
    $seq++;
}

您可以为文件指定公共前缀,开始序列号和填充因子。

例如:

# reseq.pl abc 1 2 *.jpg

将所有匹配的文件重命名为abc_01.jpg,abc_02.jpg,abc_03.jpg ......