왜 작동하지 않는지

왜 작동하지 않는지

다음 이름을 가진 파일이 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설치되어 있는 경우( renameDebian, 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패턴 일치 기능이 없습니다.

해결책

mmv

이 명령은 수행하려는 작업과 가장 유사하게 작동합니다. 강력하지는 않지만 rename간단합니다.

예를 들어mmv '*.assembled.*.fastq.gz' '#1_assembled_#2fastq.gz'

관련 정보