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

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

例:

我有

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/ 

问候,

感谢Peter van der Heijden ,这里有一个可以处理空格的文件名:

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

这样使用重命名脚本 :

 $ rename 's/^/PRE_/' * 

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

要为文件(目录) 添加前缀或后缀 ,可以使用xargs的简单而强大的方法:

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

它使用xargs的参数replace选项:-I。 你可以从手册页得到更多的细节。

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

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

上述命令将以PRE_作为前缀在当前目录中的所有文件和文件夹的前缀。

要使用util-linux的rename (而不是prename rename ,来自Debian和某些其他系统的perl变体)为当前目录中的所有文件和文件夹添加前缀,可以执行以下操作:

 rename '' <prefix> * 

这将查找空string(立即find)的第一个匹配项,然后用您的前缀replace该匹配项,然后将文件名的其余部分粘贴到该string的末尾。 完成。

对于后缀 ,您需要使用perl版本或使用find 。

与Perl:

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

如果你有Ruby(1.9+)

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

这是一个简单的脚本,你可以使用。 我喜欢使用非标准模块File::chdir来处理pipe理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: $!"; } 

在我的系统上,我没有rename命令。 这是一个简单的单线程。 它会recursion地查找所有的HTML文件,并在其名称前加上prefix_

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