내 소프트웨어에서 처리할 때 다른 이름으로 나타나는 파일 세트가 있습니다(프로세스가 성공적으로 완료되었음을 나타냄).
예를 들어 입력 파일은 SAM111_tsta.fastq를 읽은 다음 SAM111_tstaAligned.SortbyCoord.bam으로 나올 수 있습니다.
(명령줄을 통해) 디렉터리를 재귀적으로 조사하여 'Aligned.SortbyCoord.bam'이 있고 'Aligned.SortbyCoord'만 제거되어 'SAM111_tsta'로 끝나는 모든 파일을 찾을 수 있는 방법이 있는지 궁금합니다. .밤?
답변1
비슷한 것을 발견했다면이것. 다음과 같은 작업을 수행할 수 있어야 합니다.
find dir -name '*_tstaAligned.SortbyCoord.bam' -exec bash -c 'mv "$0" "${0/_tstaAligned.SortbyCoord.bam/_tsta.bam}"' "{}" \;
bash를 사용하더라도 에 지정된 패턴이므로 로 ${var//find_all/substitute_with_this}
끝나는 파일만 일치시킵니다 . 그러나 파일에 여러 개가 있는 경우 이름에 있는 모든 항목을 바꿀 수 있습니다 . (아마도 그럴 것 같지는 않습니다.)_tstaAligned.SortbyCoord.bam
find
_tstaAligned.SortbyCoord.bam
테스트를 위해 다음과 같이 하십시오:
find dir -name '*tstaAligned.SortbyCoord.bam' -exec bash -c 'printf "mv \"%s\" \"%s\"\n" "$0" "${0/_tstaAligned.SortbyCoord.bam/_tsta.bam}"' "{}" \;
답변2
이름 바꾸기 명령이 있습니다.
find -name '*Aligned.SortbyCoord.bam' -exec rename Aligned.SortbyCoord '' + \;
그것은 밝혀졌습니다유틸리티 리눅스그래서 당신은 그것을 설치해야 할 것입니다. 패키지에는 좋은 것들이 들어 있습니다.
아니면 다음을 사용하여 일반 목록을 수정할 수도 있습니다.
find -name '*Aligned.SortbyCoord.bam' \
| sed -E 's/(.*)Aligned.*/mv "&" "\1.bam"/e'
귀하의 sed가 충분히 새로운 경우 또는
find -name '*Aligned.SortbyCoord.bam' \
| sed -E 's/(.*)Aligned.*/mv "&" "\1.bam"/' \
| sh -x
그렇지 않은 경우 빠른 쉘 기능을 만들어서 수행할 수 있습니다.
doit () { while read; do mv "$REPLY" "${REPLY%Aligned*}.bam"; done; }
find -name '*Aligned.SortbyCoord.bam' | doit
아니면 원라이너로
find -name '*Aligned.SortbyCoord.bam' | while read f; do mv "$f" "${f%A*}.bam"; done
답변3
원치 않는 파일이 있다고 의심되는 디렉터리에서 아래 명령을 실행합니다.
찾다 . -이름 "Aligned.SortbyCoord.bam" | xargs rm -f
먼저 find 명령을 실행하여 출력으로 오는 필수 파일을 확인한 다음 xargs rm -f를 사용하여 삭제하는 것이 좋습니다.