rm -rf는 폴더 내용을 삭제하지 않고 대신 다른 빈 내용을 만듭니다.

rm -rf는 폴더 내용을 삭제하지 않고 대신 다른 빈 내용을 만듭니다.

저는 현재 마인크래프트 게임 서버의 시작 스크립트를 작성 중입니다. 이 스크립트에는 백업 스크립트가 포함되었습니다.

이 백업 스크립트는 거의 완벽하게 작동하지만 폴더 내용을 삭제하는 대신 다른 폴더(비슷한 이름)를 생성하고 대상 폴더에 대해 아무 작업도 수행하지 않습니다.

저는 이 명령을 사용하고 있습니다. rm -rf "$MINECRAFT_PATH/server.log backups/*"
이 명령은 bash 스크립트에서 실행됩니다.

변수에 $MINECRAFT_PATH올바른 경로가 포함되어 있습니다. 생성된 폴더의 이름은 다음과 같습니다. ( 와 server.log.backups사이의 점에 유의하세요 ). 그러나 대상 폴더의 이름은 . 이 폴더는 존재하지만 이는 문제가 아닙니다.logbackupsserver.log backups

답변1

Bash의 큰따옴표는 내용의 대부분의 리터럴 값을 유지하므로 *glob이 문자 그대로 에 전달되어 rm이라는 파일이나 폴더를 제거하려고 시도합니다 *. 그래도 $MINECRAFT_PATH대체됩니다.

아마도 당신이 원하는 것은 다음과 같습니다:

rm -rf "$MINECRAFT_PATH/server.log backups/"*

그러면 폴더의 내용이 삭제됩니다 server.log backups.

몇 가지 대안:

  • 스크립트를 보다 방어적으로 프로그래밍 -f하여 rm. 이 경우 server.log backups폴더가 비어 있으면 glob이 확장되지 않고 문자 그대로 전달되지 않고 server.log backups/*.

  • rm -rf전체 폴더를 mkdir -p나중에 삭제할 수도 있습니다 .

  • 또는 폴더 내의 모든 파일과 폴더에 대해 깊이 우선 삭제를 수행할 수도 있습니다 server.log backups. -mindepth 1상위 항목이 삭제되는 것을 방지합니다.

    find "$MINECRAFT_PATH/server.log backups" -mindepth 1 -depth -delete
    

관련 정보