重命名文件和目录(添加前缀)

我想添加前缀的所有文件夹和目录。

例如:

是的

Hi.jpg
1.txt
folder/
this.file_is.here.png
another_folder.ok/

我想添加前缀“ PRE _”

PRE_Hi.jpg
PRE_1.txt
PRE_folder/
PRE_this.file_is.here.png
PRE_another_folder.ok/

问候,

157249 次浏览

感谢 Peter van der Heijden,这里有一个可以用来处理文件名中包含空格的方法:

for f in * ; do mv -- "$f" "PRE_$f" ; done

(“——”对于以破折号开头的文件需要成功,否则其名称将被解释为 mv 命令的开关)

这样使用 重命名 脚本:

$ rename 's/^/PRE_/' *

文件名中的元字符或空格没有问题。

如果你有 Ruby (1.9 +)

ruby -e 'Dir["*"].each{|x| File.rename(x,"PRE_"+x) }'

使用 Perl:

perl -e 'rename $_, "PRE_$_" for <*>'

下面是一个可以使用的简单脚本。我喜欢使用非标准模块 File::chdir来处理管理 cd操作,因此要按原样使用这个脚本,您需要安装它(sudo cpan File::chdir)。

#!/usr/bin/perl


use strict;
use warnings;


use File::Copy;
use File::chdir; # allows cd-ing by use of $CWD, much easier but needs CPAN module


die "Usage: $0 dir prefix" unless (@ARGV >= 2);
my ($dir, $pre) = @ARGV;


opendir(my $dir_handle, $dir) or die "Cannot open directory $dir";
my @files = readdir($dir_handle);
close($dir_handle);


$CWD = $dir; # cd to the directory, needs File::chdir


foreach my $file (@files) {
next if ($file =~ /^\.+$/); # avoid folders . and ..
next if ($0 =~ /$file/); # avoid moving this script if it is in the directory


move($file, $pre . $file) or warn "Cannot rename file $file: $!";
}

对于文件(目录)的 添加前缀或后缀,您可以通过 Xargs使用简单而强大的方法:

ls | xargs -I {} mv {} PRE_{}


ls | xargs -I {} mv {} {}_SUF

它使用了 xargs 的参数替换选项:-I. 并且您可以从手册页获得更多细节。

在我的系统里,我没有 rename命令。下面是一个简单的一行程序。它递归地查找所有 HTML 文件,并在它们的名称前添加 prefix_:

for f in $(find . -name '*.html'); do mv "$f" "$(dirname "$f")/prefix_$(basename "$f")"; done

这可以通过运行一个简单的 find命令来完成:

find * -maxdepth 0 -exec mv {} PRE_{} \;

上面的命令将在工作目录中的所有文件和文件夹前面加上 PRE_的前缀。

要使用 util-linux 的 rename(相对于来自 Debian 和某些其他系统的 perl 变体 prename)为工作目录中的所有文件和文件夹添加前缀,你可以这样做:

rename '' <prefix> *

这会找到空字符串的第一个匹配项(可以立即找到) ,然后用前缀替换该匹配项,然后将文件名的其余部分粘附到该匹配项的末尾。成交。

对于 后缀,你需要 使用 perl 版本或者 使用 find

这将在他们的目录中为您的文件加上前缀。

${f%/*}是直到最后一个斜杠 /-> 目录的路径

${f##*/}是没有任何内容的文本,在最后一个斜杠 /-> 文件名之前没有路径

事情是这样的:

for f in $(find /directory/ -type f); do
mv -v $f ${f%/*}/$(date +%Y%m%d)_Prefix_${f##*/}
done