我的目录中有一堆文件名完全没有图案。我所知道的是它们都是Jpg文件。如何重命名它们,以便它们的名称会有某种顺序。
我知道在Windows中,您只需选择所有文件并将它们全部重命名为相同的名称,Windows操作系统会自动添加序列号以补偿相同的文件名。
我希望能够在Linux Fedora中做到这一点,但我只能在终端中做到这一点。请帮忙。我迷路了。
执行此操作的命令是什么?
答案 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)
我会假设:
考虑到这一点,要将所有文件重命名为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 ......