다음 이름을 가진 파일이 100개 이상 있습니다.
x.assembled.forward.fastq.gz
x(n).unassembled.reverse.fastq.gz
문제는 내가 사용하고 있는 파이프가 파일 이름에 "점"을 허용하지 않는다는 것입니다. 모든 것을 _
다음 과 같이 변경해야 합니다.
x_assembled_forward.fastq.gz
x(n)_unassembled_reverse.fastq.gz
간단한 명령을 사용하면 가능하다고 생각합니다.
mv *.assembled.*.fast.gz *_assembled_*.fastq.gz
.... 당연히 아니! :디
어떻게 해야 하나요?
답변1
이미 perl-rename
설치되어 있는 경우( rename
Debian, Ubuntu 및 기타 Debian 파생 제품에서 호출됨) 다음을 수행할 수 있습니다.
rename -n 's/\./_/g; s/_fastq_gz/.fastq.gz/' *fastq.gz
먼저 모두를 .
로 바꾸고 _
마지막 것을 _fastq_gz
로 바꿉니다 .fastq.gz
.
이로 -n
인해 실제로 파일 이름을 바꾸지 않고 변경 내용만 인쇄하게 됩니다. 이것이 귀하의 요구 사항에 맞는다고 확신하면 제거하여 -n
실제로 이름을 바꾸십시오.
rename 's/\./_/g; s/_fastq_gz/.fastq.gz/' *fastq.gz
답변2
mv
단일 파일을 가져와서 이동하거나 이름을 바꾸거나, 여러 파일이나 디렉터리를 가져와서 디렉터리로 이동하세요. 당신은 그것을 사용할 수 없습니다 mv
.
대신에:
for name in *.*.fasta.gz; do
newname=${name%.fasta.gz} # remove filename suffix
newname=${newname//./_}.fasta.gz # replace dots with underscores and add suffix
mv -i -- "$name" "$newname"
done
이는 파일 이름 접미사를 제외하고 이름의 다른 곳에 적어도 하나의 점이 포함된 현재 디렉토리의 모든 압축된 fasta 파일을 반복합니다. 알려진 파일 이름 접미사를 제거한 다음(점을 밑줄로 바꾸면 안 됨) 나머지 비트의 모든 점을 밑줄로 바꾸고 접미사를 다시 추가합니다.
최종 대체는 bash
셸에서 작동하지만 /bin/sh
.
mv -i
그런 다음 파일 이름을 바꾸는 데 사용됩니다(새 이름이 이미 존재하는지 확인하라는 메시지가 표시됩니다). 이중 대시( --
)는 이름이 대시로 시작하는 경우에만 사용됩니다(이러한 이름은 옵션 세트로 처리될 수 있으며 mv
이중 대시는 이러한 일이 발생하지 않도록 합니다).
답변3
왜 작동하지 않는지
*
명령이 실행되기 전에 셸에 의해 확장됩니다. 기존 파일과 일치합니다. mv
패턴 일치 기능이 없습니다.
해결책
- Larry Wall의 Perl을 사용하여 이름 바꾸기: 참조https://unix.stackexchange.com/a/533925/4778
- 밀리미터파 사용
mmv
이 명령은 수행하려는 작업과 가장 유사하게 작동합니다. 강력하지는 않지만 rename
간단합니다.
예를 들어mmv '*.assembled.*.fastq.gz' '#1_assembled_#2fastq.gz'