在一个目录中有多个以fgh开头的文件,例如:
fghfilea
fghfileb
fghfilec
我想将它们全部重命名为以前缀jkl开头。是否有一个单独的命令来执行该操作,而不是逐个重命名每个文件?
在一个目录中有多个以fgh开头的文件,例如:
fghfilea
fghfileb
fghfilec
我想将它们全部重命名为以前缀jkl开头。是否有一个单独的命令来执行该操作,而不是逐个重命名每个文件?
当前回答
有几种方法,但使用rename可能是最简单的。
使用一个版本的rename (Perl的rename):
rename 's/^fgh/jkl/' fgh*
使用另一个版本的rename(与Judy2K的答案相同):
rename fgh jkl fgh*
您应该检查您的平台的手册页,以确定上述哪一种方法适用。
其他回答
在Solaris上,您可以尝试:
for file in `find ./ -name "*TextForRename*"`; do
mv -f "$file" "${file/TextForRename/NewText}"
done
有几种方法,但使用rename可能是最简单的。
使用一个版本的rename (Perl的rename):
rename 's/^fgh/jkl/' fgh*
使用另一个版本的rename(与Judy2K的答案相同):
rename fgh jkl fgh*
您应该检查您的平台的手册页,以确定上述哪一种方法适用。
并不是每个系统都需要重命名。如果没有,就用壳层 本例使用bash shell
for f in fgh*; do mv "$f" "${f/fgh/xxx}";done
我编写了这个脚本来搜索所有.mkv文件,递归地将找到的文件重命名为.avi。您可以根据自己的需要定制它。我还添加了一些其他的东西,比如从文件路径中获取文件目录,扩展名,文件名,以防你将来需要引用一些东西。
find . -type f -name "*.mkv" | while read fp; do
fd=$(dirname "${fp}");
fn=$(basename "${fp}");
ext="${fn##*.}";
f="${fn%.*}";
new_fp="${fd}/${f}.avi"
mv -v "$fp" "$new_fp"
done;
(在我的Mac上)用Ruby做这个要容易得多。下面是两个例子:
# for your fgh example. renames all files from "fgh..." to "jkl..."
files = Dir['fgh*']
files.each do |f|
f2 = f.gsub('fgh', 'jkl')
system("mv #{f} #{f2}")
end
# renames all files in directory from "021roman.rb" to "021_roman.rb"
files = Dir['*rb'].select {|f| f =~ /^[0-9]{3}[a-zA-Z]+/}
files.each do |f|
f1 = f.clone
f2 = f.insert(3, '_')
system("mv #{f1} #{f2}")
end