重命名文件和目录(添加前缀)
我想在所有文件夹和目录上添加前缀。
例:
我有
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