在一个目录中有多个以fgh开头的文件,例如:
fghfilea
fghfileb
fghfilec
我想将它们全部重命名为以前缀jkl开头。是否有一个单独的命令来执行该操作,而不是逐个重命名每个文件?
在一个目录中有多个以fgh开头的文件,例如:
fghfilea
fghfileb
fghfilec
我想将它们全部重命名为以前缀jkl开头。是否有一个单独的命令来执行该操作,而不是逐个重命名每个文件?
当前回答
使用mmv:
mmv "fgh*" "jkl#1"
其他回答
使用重命名:
$ renamer --find /^fgh/ --replace jkl * --dry-run
一旦您对输出看起来正确感到满意,就删除——dry-run标志。
在文件列表上运行sed表达式的通用脚本(将sed解决方案与重命名解决方案结合在一起):
#!/bin/sh
e=$1
shift
for f in $*; do
fNew=$(echo "$f" | sed "$e")
mv "$f" "$fNew";
done
通过向脚本传递一个sed表达式来调用,然后是任何文件列表,就像rename的一个版本:
script.sh 's/^fgh/jkl/' fgh*
这里有一个使用命令行Groovy的方法:
groovy -e 'new File(".").eachFileMatch(~/fgh.*/) {it.renameTo(it.name.replaceFirst("fgh", "jkl"))}'
您也可以使用下面的脚本。它很容易在终端上运行…
//一次重命名多个文件
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
有很多方法可以做到这一点(并不是所有的方法都适用于所有的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系统所需的内容。