从多个目录复制文件并在每个文件的前缀中添加数字?

从多个目录复制文件并在每个文件的前缀中添加数字?

我需要从多个目录复制特定的命名文件,并且需要按顺序在文件前缀中添加数字。例如,我有以下目录,gene1, gene2, gene3 ..... gene100每个目录都有一个文件,即protein.fasta.我需要protein.fasta从每个目录复制所有文件并粘贴到另一个目录(即输出)中。我已经尝试了以下脚本,但该脚本没有达到我的目的,它只复制和粘贴一个文件,其余的不复制和重命名,最终出现错误。请帮助我做同样的事情。

a=1
for i in **/protein.fasta
do
cp "$i" "$a"_"$i" output/
a=`expr $a + 1`
done

下面给出了详细的示例和预期输出,目录

gene1, gene2, gene3....gene100

要从每个文件中提取的文件是protein.fasta

output目录中的预期输出

1_protein.fasta
2_protein.fasta
3_protein.fasta
.
.
100_protein.fasta

先感谢您。

答案1

你应该能够循环目录gene从当前目录名中删除前缀以用作目标文件名的前缀:

for d in gene*; do 
  echo cp "$d/protein.fasta" "output/${d#gene}_protein.fasta"
done 

echo一旦您确信它正在做正确的事情,请将其删除。

答案2

我想也许你想用来basename从文件名中删除目录?

i=1
for f in **/test.file; do
  cp "${f}" "out/${i}_$(basename $f)"
  (( i += 1 ))
done

相关内容