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

时间:2011-01-24 21:33:00

标签: linux perl shell

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

示例:

我有

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/

此致

10 个答案:

答案 0 :(得分:181)

感谢Peter van der Heijden,这里有一个适用于包含空格的文件名:

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

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

答案 1 :(得分:75)

以这种方式使用the rename script

$ rename 's/^/PRE_/' *

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

答案 2 :(得分:54)

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

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

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

它正在使用xargs的参数替换选项:-I。您可以从手册页获得更多详细信息。

答案 3 :(得分:24)

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

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

上述命令将为当前目录中的所有文件和文件夹添加前缀PRE_

答案 4 :(得分:7)

如果你有Ruby(1.9 +)

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

答案 5 :(得分:7)

使用Perl:

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

答案 6 :(得分:7)

使用util-linux&#39; s rename(而不是prename,来自Debian和某些其他系统的perl变体)为当前目录中的所有文件和文件夹添加前缀,你可以这样做:

rename '' <prefix> *

这会找到第一次出现的空字符串(立即找到),然后用您的前缀替换该出现,然后将文件名的其余部分粘贴到该字符串的末尾。完成。

对于后缀,您需要use the perl versionuse find

答案 7 :(得分:2)

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

答案 8 :(得分:1)

在我的系统上,我没有rename命令。这是一个简单的一个班轮。它以递归方式查找所有HTML文件,并在其名称前添加prefix_

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

答案 9 :(得分:0)

这将在您的目录中为您的文件添加前缀。

${f%/*}是直到最后一次斜杠的路径/ - &gt;目录

${f##*/}是在最后一次斜杠/之前没有任何内容的文字 - &gt;没有路径的文件名

这是怎么回事:

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