여러 디렉터리에서 파일을 복사하고 각 파일의 접두사에 숫자를 추가하시겠습니까?

여러 디렉터리에서 파일을 복사하고 각 파일의 접두사에 숫자를 추가하시겠습니까?

여러 디렉터리에서 특정 이름의 파일을 복사해야 하고 파일 접두사에 번호를 순서대로 추가해야 합니다. 예를 들어 다음 디렉터리가 있고 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

관련 정보