일부 파일에는 이름에 "."가 있습니다. rm 명령에 대한 입력으로 .txt 파일을 사용하여 어떻게 삭제할 수 있습니까?

일부 파일에는 이름에 "."가 있습니다. rm 명령에 대한 입력으로 .txt 파일을 사용하여 어떻게 삭제할 수 있습니까?

Linux 시스템에 제거가 필요한 것으로 확인된 여러 파일을 나열하는 텍스트 파일이 있습니다. 이러한 파일 중 일부는 Windows에서 생성되었으며 '1.' 또는 '2.'(즉, 마침표 뒤에 텍스트 공간이 있음) 등이 포함되어 있습니다.

rmrm -f따옴표와 함께 filename 명령을 입력하면 명령이 이를 제거합니다. 하지만 이 명령을 70만 번 입력하면 발생하지 않습니다. 명령에 "목록" 파일을 입력하려고 했지만 이름이 불규칙한 파일은 건너뜁니다.

어쨌든 삭제 명령을 스크립트에 넣어 자동화된 방식으로 실행할 수 있습니까?

답변1

내 생각엔 당신이 흔히 듣는 이유 중 하나에 직면한 것 같아요.출력을 구문 분석하지 않습니다.ls.

즉, list.txt삭제하려는 파일 이름(한 줄에 하나씩)을 포함하고 Linux 스타일 줄 끝을 사용하는 경우 다음도 작동합니다.

while IFS= read filename
do
  rm "$filename"
done < list.txt

이를 먼저 테스트하는 것이 좋습니다(예: 더미 파일 생성을 사용한 touch "1. this is a first test.txt"다음 해당 파일 이름이 포함된 더미 파일 touch "2. my second_file.bla"생성 list.txt).

위 코드를 bash스크립트에 포함하거나 다음과 같이 명령줄에 직접 입력할 수 있습니다.

user@host$ while IFS= read filename; do rm "$filename"; done < list.txt

답변2

?대화형 삭제는 (물음표)를 와일드카드 문자로 사용하여 수행할 수 있습니다 . 예를 들어

rm 1.?

삭제됩니다1.

단점은 모든 파일도 삭제된다는 것입니다 1.a.

파일 목록이 한 줄에 하나의 파일로 구성된 list.txt인 경우 다음을 사용할 수 있습니다.

awk '{printf "rm \"%s\"\n",$0}' file.txt 

빌드 명령

어디

  • $0전체 줄입니다(후행 또는 선행 공백 포함).

괜찮다면 사용해 보세요

awk '{printf "rm \"%s\"\n",$0}' file.txt |bash

관련 정보