在一个目录中有多个以fgh开头的文件,例如:
fghfilea
fghfileb
fghfilec
我想将它们全部重命名为以前缀jkl开头。是否有一个单独的命令来执行该操作,而不是逐个重命名每个文件?
在一个目录中有多个以fgh开头的文件,例如:
fghfilea
fghfileb
fghfilec
我想将它们全部重命名为以前缀jkl开头。是否有一个单独的命令来执行该操作,而不是逐个重命名每个文件?
当前回答
这是如何使用sed和mv一起执行重命名:
for f in fgh*; do mv "$f" $(echo "$f" | sed 's/^fgh/jkl/g'); done
根据下面的评论,如果文件名中有空格,则可能需要在返回文件名的子函数周围加上引号,以便将文件移动到:
for f in fgh*; do mv "$f" "$(echo $f | sed 's/^fgh/jkl/g')"; done
其他回答
有几种方法,但使用rename可能是最简单的。
使用一个版本的rename (Perl的rename):
rename 's/^fgh/jkl/' fgh*
使用另一个版本的rename(与Judy2K的答案相同):
rename fgh jkl fgh*
您应该检查您的平台的手册页,以确定上述哪一种方法适用。
rename fgh jkl fgh*
安装Perl重命名脚本:
sudo cpan install File::Rename
在Stephan202的回答的评论中提到了两个重命名。 基于Debian的发行版有Perl的重命名。Redhat/rpm发行版的重命名为C。 OS X默认没有安装(至少在10.8中),Windows/Cygwin也没有。
您也可以使用下面的脚本。它很容易在终端上运行…
//一次重命名多个文件
for file in FILE_NAME*
do
mv -i "${file}" "${file/FILE_NAME/RENAMED_FILE_NAME}"
done
例子:-
for file in hello*
do
mv -i "${file}" "${file/hello/JAISHREE}"
done
在Solaris上,您可以尝试:
for file in `find ./ -name "*TextForRename*"`; do
mv -f "$file" "${file/TextForRename/NewText}"
done