일련의 수동 단계가 포함된 작업이 있습니다. 단계 중 하나는 다음을 수행하는 것입니다 rm -rf *
. 폴더에 있는 모든 항목을 삭제해야 하지만 이는 약간 위험해 보입니다. 사용자가 명령을 실행하는 동안 주의하지 않고 잘못된 폴더에 있는 경우.
폴더의 모든 내용을 삭제하는 작업을 안전하게 수행할 수 있는 방법이 있습니까?
답변1
예, 디렉터리 계층 구조에서 한 단계 위로 이동하고 rm -rf dirname
특정 디렉터리 이름에 대해 작업을 수행합니다(명령에 관련된 파일 이름 글로빙이 없어야 함).
이렇게 하면 불행하게도 현재 작업 디렉토리에 이름은 동일하지만 관련이 없는 디렉토리가 있는 경우를 제외하고 사용자는 잘못된 디렉토리에 있는 경우 실수로 잘못된 항목을 삭제하지 않습니다. 또한 누락되었을 수 있는 숨겨진 파일과 디렉터리를 제거합니다 ( 숨겨진 이름을 확장하지 않기 rm -rf *
때문에 ).*
그런 다음 필요에 따라 디렉터리를 다시 만듭니다.
또 다른 옵션은아니요디렉토리를 삭제하고 이름을 바꾸십시오(그리고 아카이브하고 압축할 수도 있습니다). 이 작업은 디렉터리의 상위 디렉터리에서도 수행할 수 있으며 나중에 해당 디렉터리에서 파일을 복원할 수 있습니다. 이것이 실행 가능한 옵션인지 여부는 디렉토리에 포함된 내용과 현재 작업이 실제로 무엇인지에 따라 다릅니다.
또한 관련:
답변2
사용자가 주의를 기울이지 않는 것이 가장 큰 우려 사항이라면 확인을 요청하는 것이 가장 좋습니다. 예를 들어:
delete_cwd() {
printf 'Are you sure you want to unlink everything in %s? ' "$(pwd)"
IFS= read REPLY
case $REPLY in
[yY]|[yY]es) find . -delete;;
*) return 1;;
esac
}
이는 -delete
표준화되지 않았으므로 다음을 사용해야 할 수도 있습니다.
find . ! -name . -exec rm -rf {} +
또는 사용자가 모든 삭제를 확인하도록 하려면 해당 기능을 건너뛰고 다음을 직접 수행할 수 있습니다.
find . ! -name . -depth -ok rm -rf {} +
답변3
단순한. 현재 폴더의 모든 내용을 삭제하려면:
rm -rf ./*
./현재 디렉토리로 이동하므로./*현재 디렉토리의 모든 것입니다. (그냥 점을 잊지 마세요, 진지하게, 점을 잊지 마세요)
Kusalananda의 답변에서 언급했듯이 여기에는 숨겨진 파일이 포함되지 않습니다. 따라서 숨겨진 파일을 제거하려면 별도의 작업을 수행해야 합니다.rm -rf ./.*)
더 멋져지고 싶다(숨겨진 파일 포함) 모든 것을 한 번에 안전하게 삭제하는 명령)
rm -rf ./{,.[!.],..?}*
하지만 가능합니다rm -rf ./* ./.*안전하기도 합니다(이 기회를 잡고 싶은지는 잘 모르겠습니다)
완전히 안전하고 싶고 어느 폴더에 있는지 확실하지 않은 경우 유일한 방법은 다음과 같습니다.
rm -rf /path/to/folder/*
또는
rm -rf /path/to/folder/{,.[!.],..?}*