나는 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
find
Perl 유틸리티를 사용하여 rename
사용할 수 있습니다.
find MainDirectory -type f -name '*.unaligned.fasta' \
-exec rename -v -d 's/.*:(uce-\d+).*/$1.unaligned.fasta/' {} +
이는 각 경로의 파일 이름 부분(options -d
)만 변경하고 대상 파일 이름이 이미 존재하는 경우 파일 이름은 변경되지 않은 채로 둡니다. -v
상세하지 않은 출력에 대한 옵션을 제거합니다 .