파일 이름에서 특정 단어 제거

파일 이름에서 특정 단어 제거

내 소프트웨어에서 처리할 때 다른 이름으로 나타나는 파일 세트가 있습니다(프로세스가 성공적으로 완료되었음을 나타냄).

예를 들어 입력 파일은 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.bamfind_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 '' + \;

그것은 밝혀졌습니다유틸리티Linux그래서 당신은 그것을 설치해야합니다. 그 패키지에는 좋은 것들이 있습니다.

또는 다음을 사용하여 간단한 목록을 수정할 수 있습니다.

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

원치 않는 파일이 있다고 의심되는 디렉터리에서 다음 명령을 실행합니다.

찾다. -내 이름"align.SortbyCoord.bam" | xargs rm -f

먼저 find 명령을 실행하여 필요한 파일을 출력으로 확인한 다음 xargs rm -f를 사용하여 삭제하는 것이 좋습니다.

관련 정보