[英]How to rename multiple files in terminal (LINUX)?
我在目录中有一堆完全没有名称的文件。 我所知道的是它们都是Jpg文件。 如何重命名它们,以便它们的名称具有某种顺序。
我知道在Windows中,您要做的就是选择所有文件并将它们重命名为相同的名称,Windows操作系统会自动添加序列号以补偿相同的文件名。
我希望能够在Linux Fedora中做到这一点,但我只能在Terminal中做到这一点。 请帮忙。 我搞不清楚了。
这样做的命令是什么?
最好的方法是在终端中运行从图片到图片的循环,并将其重命名为一个数字,每个循环的数字将增加一个。
您可以执行以下操作:
n=1
for i in *.jpg; do
p=$(printf "%04d.jpg" ${n})
mv ${i} ${p}
let n=n+1
done
只需将其逐行输入到终端中即可。
如果要在数字前放置自定义名称,则可以在第三行的百分号之前放置自定义名称。
如果要更改名称数字中的位数,则只需在第三行中替换“ 4”(但是不要更改“ 0”)。
我将假设:
请记住,要将所有文件重命名为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确实有很多工具可以使诸如此类的任务自动化,但是它们具有一些学习上的困难。
创建一个包含以下内容的脚本:
#!/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 Images-
这会将目录中的所有* .jpg文件重命名为Image-1.jpg,Image-2.jpg等,以便按照从旧到新的顺序在OS X命令外壳中进行测试。
很久以前,我写了一个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 ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.