複数のディレクトリから特定の名前のファイルをコピーし、ファイルプレフィックスに番号を順番に追加する必要があります。たとえば、次のディレクトリがあり、gene1, gene2, gene3 ..... gene100
各ディレクトリにファイルがあります。つまり、各ディレクトリのすべてのファイルをコピーして別のディレクトリ(出力など)に貼り付ける必要がありますprotein.fasta
。protein.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