在一个目录中有多个以fgh开头的文件,例如:

fghfilea
fghfileb
fghfilec

我想将它们全部重命名为以前缀jkl开头。是否有一个单独的命令来执行该操作,而不是逐个重命名每个文件?


当前回答

另一个可能的参数展开:

for f in fgh*; do mv -- "$f" "jkl${f:3}"; done

其他回答

使用mmv:

mmv "fgh*" "jkl#1"

这里有一个使用命令行Groovy的方法:

groovy -e 'new File(".").eachFileMatch(~/fgh.*/) {it.renameTo(it.name.replaceFirst("fgh", "jkl"))}'

有很多方法可以做到这一点(并不是所有的方法都适用于所有的unix系统):

ls | cut -c4- | xargs -I§ mv fgh§ jkl§ The § may be replaced by anything you find convenient. You could do this with find -exec too but that behaves subtly different on many systems, so I usually avoid that for f in fgh*; do mv "$f" "${f/fgh/jkl}";done Crude but effective as they say rename 's/^fgh/jkl/' fgh* Real pretty, but rename is not present on BSD, which is the most common unix system afaik. rename fgh jkl fgh* ls | perl -ne 'chomp; next unless -e; $o = $_; s/fgh/jkl/; next if -e; rename $o, $_'; If you insist on using Perl, but there is no rename on your system, you can use this monster.

其中一些有点复杂,列表还远远不够完整,但是您将在这里找到几乎所有unix系统所需的内容。

有几种方法,但使用rename可能是最简单的。

使用一个版本的rename (Perl的rename):

rename 's/^fgh/jkl/' fgh*

使用另一个版本的rename(与Judy2K的答案相同):

rename fgh jkl fgh*

您应该检查您的平台的手册页,以确定上述哪一种方法适用。

您也可以使用下面的脚本。它很容易在终端上运行…

//一次重命名多个文件

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