批量重命名相同扩展名的多个文件

时间:2016-11-30 14:56:30

标签: bash shell

我需要在不知道文件的文件名(基本名称/字符串名称)的情况下重命名多个文件。

我试过:

for i in $(ls /Users/Destiny/Desktop/Index/*.ebwt); 
do 
    mv -v "$i" "${i/hsa/hsa.genome.V86C}"; ## works when i know the string to replace
done

但如果不知道文件名(字符串名称)怎么办?

重命名之前: hsa.1.ebwt hsa.2.ebwt hsa.3.ebwt hsa.4.ebwt

重命名后: hsa.genome.V86C.1.ebwt hsa.genome.V86C.2.ebwt hsa.genome.V86C.3.ebwt hsa.genome.V86C.4.ebwt < / p>

1 个答案:

答案 0 :(得分:0)

您可以在目录中使用find执行某些操作。如果它们都具有相同的扩展名,那么您现在拥有的移动可能就像下面一样:

find /Users/Destiny/Desktop/Index -type f -name "*.ebwt" | while read file; 
do 
mv -v "$file" "${file/hsa/hsa.genome.V86C}"; 
done 

这会将它重命名为当前目录,如果你想稍后将其移动到另一个目录,你可以使用basename包围这样的第二个参数,以便更容易移动:

"/SomeDirectory/$(basename ${file/hsa/hsa.genome.V86C})"

如果你不希望它在查找中递归,你也可以在你要查找的目录之后放一个-maxdepth 1

相关问题