이름에 공백이 있는 모든 파일을 삭제하려고 합니다. 다음 명령을 사용하고 있습니다. 하지만 이로 인해 오류가 발생합니다.
주문하다:ls | egrep '. ' | xargs rm
여기에서 명령을 사용하면 ls | egrep '. '
파일 이름에 공백이 있는 모든 파일 이름이 표시됩니다. 그러나 출력을 rm으로 전달하려고 하면 모든 공백(선행 또는 후행)이 제거됩니다. 그래서 내 명령이 올바르게 실행되지 않습니다.
이름에 공백이 하나 이상 있는 파일을 삭제하는 방법에 대한 조언이 있습니까?
답변1
rm
명령에 표준 와일드카드를 사용할 수 있습니다 .
rm -- *\ *
이렇게 하면 이름에 공백이 포함된 모든 파일이 제거됩니다. 공백은 이스케이프 처리되므로 쉘은 공백을 구분 기호로 해석하지 않습니다. 추가하면 --
대시로 시작하는 파일 이름과 관련된 문제를 피할 수 있습니다(인수로 해석되지 않음 rm
).
삭제하기 전에 각 파일을 확인하려면 다음 -i
옵션을 추가하십시오.
rm -i -- *\ *
답변2
나는 ls
출력을 구문 분석하는 것을 피할 것입니다
왜 안 돼:
find . -type f -name '* *' -delete
괜찮아요 rm
:-).
이는 재귀적이지만 주석에서 언급한 대로 현재 디렉터리와 중첩 디렉터리에 공백이 있는 모든 파일이 삭제됩니다.
답변3
"이상한 파일"이라는 가상의 이름을 가진 이 파일을 살펴보십시오.
솔루션 1
rm strange\ file
솔루션 2
rm "strange file"
해결 방법 3
ls -i "strange file"
그러면 인덱스 노드가 표시됩니다.
find . -inum "numberoofinode" -exec rm {} \;
파일 이름이 매우 이상한 경우(예:
!-filename or --filename
사용
rm ./'!-filename'
답변4
당신은 그것을 사용할 수 있습니다 :
find . -name '* *' -delete