Shell-Script

從多個目錄複製文件並在每個文件的前綴中添加數字?

  • December 27, 2019

我需要從多個目錄中複製一個特定的命名文件,並且需要在文件前綴中按順序添加數字。例如,我有以下目錄,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

先感謝您。

您應該能夠遍歷目錄並從目前目錄名稱中刪除gene前綴以用作目標文件名的前綴:

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

echo一旦您對它正在做正確的事情感到滿意,請刪除它。

我想也許你想用來basename從文件名中刪除目錄?

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

引用自:https://unix.stackexchange.com/questions/559144