![일부 파일에는 이름에 "."가 있습니다. rm 명령에 대한 입력으로 .txt 파일을 사용하여 어떻게 삭제할 수 있습니까?](https://linux55.com/image/165851/%EC%9D%BC%EB%B6%80%20%ED%8C%8C%EC%9D%BC%EC%97%90%EB%8A%94%20%EC%9D%B4%EB%A6%84%EC%97%90%20%22.%22%EA%B0%80%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%20rm%20%EB%AA%85%EB%A0%B9%EC%97%90%20%EB%8C%80%ED%95%9C%20%EC%9E%85%EB%A0%A5%EC%9C%BC%EB%A1%9C%20.txt%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%82%AD%EC%A0%9C%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
Linux 시스템에 제거가 필요한 것으로 확인된 여러 파일을 나열하는 텍스트 파일이 있습니다. 이러한 파일 중 일부는 Windows에서 생성되었으며 '1.' 또는 '2.'(즉, 마침표 뒤에 텍스트 공간이 있음) 등이 포함되어 있습니다.
rm
rm -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