我需要在不知道文件的文件名(基本名称/字符串名称)的情况下重命名多个文件。
我试过:
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>
答案 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