2

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

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

所需:ABC.mat

4

5 回答 5

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
于 2012-09-21T07:43:41.240 回答
3

或者可以bash使用awk很少使用的命令行工具rename

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

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

于 2012-09-21T09:32:26.760 回答
1

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

prename 's/(.*)\.dat\.length\.doc\.fasta/$1.mat/' *.dat.length.doc.fasta
于 2012-09-21T16:52:54.000 回答
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
于 2012-09-21T08:05:05.867 回答
0
ls -1 *.dat.length.doc.fasta | nawk '{p=$0;gsub("dat.length.doc.fasta","mat");system("mv "p" "$0); }'
于 2012-09-24T10:54:39.753 回答