일부 파일에는 '?'가 있습니다. 파일 이름 끝에 해당 파일을 찾아야 합니다.

일부 파일에는 '?'가 있습니다. 파일 이름 끝에 해당 파일을 찾아야 합니다.

이 파일들이 어떻게 생겼는지 전혀 모르지만 다음은 다음과 같습니다 ls -lh.

total 8.1G
-rw-r--r--  1 root root 1.6G Apr 13  2022 test_some_data_S6_R2.fastq.gz?
-rw-r--r--  1 root root 1.5G Apr 13  2022 test_some_data_S6_R1.fastq.gz

ls를 사용하여 파일 이름을 자동 완성하도록 하면 다음과 같습니다.

ls /path/to/file/test_some_data_S6_R2.fastq.gz^M

^MDOS에서는 캐리어 리턴으로 간주되므로 누군가가 Windows 시스템에서 이름을 복사하여 파일 이름을 지정하는 데 사용했을 수도 있습니다. ^M파일 내용을 바꿀 수 있는 방법은 많지만 제 경우에는 ^M이름이 포함된 파일을 찾고 싶습니다.

시도했지만 find /path/with/files/ -iname "^M"운이 없었습니다. 로 탈출을 시도했지만 \여전히 주사위가 없습니다. 나는 SSH를 통해RHELCTRLMobaXTerm을 사용하는 컴퓨터이므로 Windows 단축키 + Q, CTRL+ 를 시도했지만 M현재 작업 창을 숨기고 ^M.

답변1

$'\r'Bash에서는 제어 문자를 삽입하는 데 사용할 수 있습니다 ^M.

find /path/with/files -name '*'$'\r'
  • inameglob 표현식에 문자가 포함되어 있지 않으므로 필요하지 않습니다.
  • 이름 앞의 이름과 일치하도록 별표를 포함해야 합니다.^M

^M의 조합으로 bash 명령줄에 직접 입력할 수도 있었습니다 Ctrl + v Ctrl + m. 실제 키는 bind및 해당 할당에 따라 달라질 수 있습니다 quoted-insert.

find /path/with/files -name '*^M'

답변2

다음은 방법에 대한 작은 변형입니다.@choroba가 답변에 게시했습니다..

텍스트 편집기에서 다음과 같은 작은 스크립트(여기서는 myscript라고 함)를 만듭니다.

#!/bin/bash
find . -name "*^M" -print0 | xargs -0 ls 

여기서 유일한 비결은 문자를 ^M문자 그대로 삽입해야 한다는 점이며, 텍스트 편집기에 따라 이를 위한 특별한 비결이 있습니다. vi 또는 vim에서는 ctrl- 입니다 K. 이맥스에서는 ctrl- 입니다 Q. 필요한 것을 사용하십시오.

그런 다음 스크립트를 실행 가능하게 만듭니다.

chmod 755 myscript

그런 다음 스크립트를 실행합니다 ./myscript. 해당 문자로 끝나는 파일만 나열되어야 합니다 ^M. 원하는 작업을 수행하는 경우 다음 xargs -0 ls으로 변경 xargs -0 rm -f하고 스크립트를 다시 실행하여 파일을 제거하십시오.

관련 정보