이름에 공백이 있는 파일 삭제

이름에 공백이 있는 파일 삭제

이름에 공백이 있는 모든 파일을 삭제하려고 합니다. 다음 명령을 사용하고 있습니다. 하지만 이로 인해 오류가 발생합니다.

주문하다: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

관련 정보