複数のディレクトリからファイルをコピーし、各ファイルのプレフィックスに数字を追加しますか?

複数のディレクトリからファイルをコピーし、各ファイルのプレフィックスに数字を追加しますか?

複数のディレクトリから特定の名前のファイルをコピーし、ファイルプレフィックスに番号を順番に追加する必要があります。たとえば、次のディレクトリがあり、gene1, gene2, gene3 ..... gene100各ディレクトリにファイルがあります。つまり、各ディレクトリのすべてのファイルをコピーして別のディレクトリ(出力など)に貼り付ける必要がありますprotein.fastaprotein.fasta次のスクリプトを試しましたが、私の目的には合いません。 1つのファイルだけをコピーして貼り付け、残りはコピーして名前を変更しないため、最終的にエラーが発生します。私もそうするのを手伝ってください。

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

関連情報