SED는 디렉토리에 부분적인 파일 이름을 유지합니다.

SED는 디렉토리에 부분적인 파일 이름을 유지합니다.

나는 MainDirectory/hundreds_of_subdirectories/thousands_of_fastas구조를 가지고 있습니다. 기본이 되는 각 fasta(생물정보학 파일 형식)에 대해 파일의 특정 부분만 유지하기 위해 파일 이름과 파일의 첫 번째 줄을 변경해 보았습니다.

따라서 다음 텍스트는 파일 이름과 파일 이름을 구성합니다.

947-length-1150-cov-1000|contig:JAECWU010000213.1|slice:817050-818200|uce:uce-1452|match:817550-817700|orient:{'+'}|probes:4.unaligned.fasta

이 되다:

uce-1452.unaligned.fasta

내가 시도한 파일의 첫 번째 줄을 편집하려면

sed '1 s/^[^|uce-]*(|uce-[0-9]).*/\1/' hundreds_of_subdirectories/*

그런데 티켓이 아니네요...

그런 다음 일종의 루프를 엉망으로 만듭니다 ...

for i in *\*.unaligned.fasta; do sed -E 's/^[^|uce-]*(|uce-[0-9]).*/\1/'; done

파일 이름의 경우 rename대신 사용하는 것이 sed좋지만 sed다음과 같은 것을 시도했습니다.

for x in hundreds_of_subdirectories/thousands_of_fastas*unaligned.fasta; do
    echo $x | sed -r 's/^[^|uce-]*(|uce-[0-9]).*/mv' -v "\0" "|uce-[0-9].*/\1/.unaligned.fasta"/
done

내가 나무를 향해 짖었나요? 감사해요!

답변1

findPerl 유틸리티를 사용하여 rename사용할 수 있습니다.

find MainDirectory -type f -name '*.unaligned.fasta' \
  -exec rename -v -d 's/.*:(uce-\d+).*/$1.unaligned.fasta/' {} +

이는 각 경로의 파일 이름 부분(options -d)만 변경하고 대상 파일 이름이 이미 존재하는 경우 파일 이름은 변경되지 않은 채로 둡니다. -v상세하지 않은 출력에 대한 옵션을 제거합니다 .

관련 정보