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

fghfilea
fghfileb
fghfilec

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


当前回答

在Solaris上,您可以尝试:

for file in `find ./ -name "*TextForRename*"`; do 
    mv -f "$file" "${file/TextForRename/NewText}"
done

其他回答

#!/bin/sh

#replace all files ended witn .f77 to .f90 in a directory

for filename in *.f77
do 
    #echo $filename
    #b= echo $filename | cut -d. -f1
    #echo $b    
    mv "${filename}" "${filename%.f77}.f90"    
done

使用mmv:

mmv "fgh*" "jkl#1"

在文件列表上运行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*

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

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

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

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

rename fgh jkl fgh*

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

通用命令为

找到/路径/ /文件- name ' <搜索> *’- bash - c”mv $ 0 ${0 / <搜索> / <取代>}“{}\;

其中<search>和<replace>应分别替换为您的源和目标。

作为针对您的问题定制的更具体的示例(应该从与您的文件所在的文件夹运行),上面的命令看起来像这样:

找到。- name的海湾金融公司* - bash - c ' mv $ 0 ${0 /金融/ . jkl} ' {} \;

对于“演练”,在mv之前添加echo,这样你就会看到生成了什么命令:

找到。- name的海湾金融公司* - bash - c的回声mv $ 0 ${0 /金融/ . jkl}’{}\;