특정 단어 .fasta로 끝나는 파일을 변경하는 방법

특정 단어 .fasta로 끝나는 파일을 변경하는 방법

".fasta"로 끝나는 특정 단어가 포함된 파일을 어떻게 선택하고 변경할 수 있나요?

예를 들어 "car"라는 단어가 포함된 파일을 선택합니다.

find /home/user -name "*car*"

이것은 나에게 준다

/home/user/car.txt
/home/user/scar.fa
/home/user/cart.fa
/home/user/scart.fasta

그런데 어떻게 바꾸는지 모르겠어서 모두 ".fasta"로 끝나네요.

그래서 최종 결과는

/home/user/car.fasta
/home/user/scar.fasta
/home/user/cart.fasta
/home/user/scart.fasta

답변1

옵션에서 as 명령을 사용하는 것이 좋습니다 rename.-execfind

find /home/user -name "*car*" -exec rename 's/[^.]*$/fasta/' {} \;

[^.]*$파일 이름 끝에 점이 아닌 모든 항목을 일치시키고 fasta확장자로 바꿉니다.

명령어를 모르신다면 확인해 보세요 man rename.

답변2

Bash 솔루션에 대해서는 이 개요를 참조하세요.하위 문자열 삭제.

#!/bin/bash

for f in *car*; do
   [[ ${f##*.} == "fasta" ]] && continue

   f_no_ext="${f%%.*}"

   if [[ -e "${f_no_ext}.fasta" ]]; then
      echo "Not moving $f because it would clobber ${f_no_ext}.fasta"
      continue
   fi

   mv "$f" "${f_no_ext}.fasta"
done

exit

그러면 모든 파일을 반복 *car*하여 이름을 .fasta 확장자로 변경하고 이미 .fasta로 끝나는 파일은 건너뜁니다. 다른 솔루션에서는 이 단계를 무시할 수도 있다고 생각합니다.

if편집: 파일 덮어쓰기를 방지하기 위해 확장자가 .fasta인 파일이 이미 존재하는지 확인하는 블록을 추가했습니다 . 예를 들어 car.txt와 car.fasta가 있는 경우입니다.

답변3

루프와 명령을 사용하는 mv또 다른 방법 :

find /home/user -type f -name "*car*" | while read f; do mv -v "$f" "${f%.*}.fasta"; done

관련 정보