重命名Bash的大量文件的扩展名

时间:2012-09-21 07:38:23

标签: bash sed awk

我想更改大量文件的扩展名

示例:“ABC.dat.length.doc.fasta”

所需: ABC.mat

5 个答案:

答案 0 :(得分:5)

您可以在bash循环中使用for参数扩展:

for file in *.length.doc.fasta
do
  mv "$file" "${file%dat.length.doc.fasta}"mat
done

另一种方法:

for file in *.length.doc.fasta
do
  mv "$file" "${file%%.*}".mat
done

答案 1 :(得分:3)

除了使用bashawk之外,还可以使用很少使用的命令行工具rename

rename .dat.length.doc.fasta .mat *.dat.length.doc.fasta

这将替换第一个参数,第二个参数用于提供的文件是后续参数(此处由*.dat.length.doc.fasta的shell扩展表示。)

答案 2 :(得分:1)

prename 可以轻松地为您完成此操作。使用正则表达式来定位和重命名文件。

prename 's/(.*)\.dat\.length\.doc\.fasta/$1.mat/' *.dat.length.doc.fasta

答案 3 :(得分:0)

你可以使用AWK在一行中完成:

ls -1 *.dat.length.doc.fasta | awk -F"." '{system("mv "$0" "$1".mat")}' -

输入:

$ ls
ABC.dat.length.doc.fasta
ABCD.dat.length.doc.fasta
ABCDE.dat.length.doc.fasta
do_not_touch.txt

输出:

$ ls
ABCDE.mat
ABCD.mat
ABC.mat
do_not_touch.txt

答案 4 :(得分:0)

ls -1 *.dat.length.doc.fasta | nawk '{p=$0;gsub("dat.length.doc.fasta","mat");system("mv "p" "$0); }'