我想在所有文件夹和目录上添加前缀。
例如:
我有
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/
我想在所有文件夹和目录上添加前缀。
例如:
我有
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
("--"被用于成功操作以破折号开头的文件,否则它们的名称可能会被解释为mv命令的开关)
ls
命令更改为 *
并在 mv
命令的参数周围加上双引号,那么它将适用于包含空格的文件。 - heijp06bash
中运行良好,我该如何在 tcsh
中实现? - The_Learner使用 xargs 可以简单而强大地为文件(目录)添加前缀或后缀:
ls | xargs -I {} mv {} PRE_{}
ls | xargs -I {} mv {} {}_SUF
它正在使用xargs的参数替换选项:-I。您可以从man页面获取更多详细信息。
ls *.old | xargs -I {} mv {} PRE_{}
。 - Zheng Qsin可以通过运行简单的find
命令来完成:
find * -maxdepth 0 -exec mv {} PRE_{} \;
上述命令会在当前目录下给所有文件和文件夹添加前缀 PRE_
。
util-linux
将其作为/usr/bin/rename.ul
提供。 - user1338062rename 's/^/some_prefix_here/' *
- undefined使用 Perl:
perl -e 'rename $_, "PRE_$_" for <*>'
ruby -e 'Dir["*"].each{|x| File.rename(x,"PRE_"+x) }'
在我的系统中,我没有rename
命令。这里有一个简单的一行命令。它会递归查找所有HTML文件,并在它们的名称前面添加prefix_
:
for f in $(find . -name '*.html'); do mv "$f" "$(dirname "$f")/prefix_$(basename "$f")"; done
find
命令,您无需循环即可执行命令:https://dev59.com/g2445IYBdhLWcg3wl7XW#33297439 - DJCrashdummy这里是一个简单的脚本,您可以使用它。我喜欢使用非标准模块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: $!";
}
这将在文件目录中添加前缀。
${f%/*}
是路径直到最后一个斜杠/
,即目录。
${f##*/}
是最后一个斜杠/
之后的文本,即没有路径的文件名。
所以就是这样:
for f in $(find /directory/ -type f); do
mv -v $f ${f%/*}/$(date +%Y%m%d)_Prefix_${f##*/}
done