rm -r과 rm -f의 차이점은 무엇입니까?

rm -r과 rm -f의 차이점은 무엇입니까?

매뉴얼에서:

  • -f, --force

    존재하지 않는 파일을 무시하고 메시지를 표시하지 않음

  • -r, -R, --재귀

    디렉토리의 내용을 재귀적으로 제거

이 옵션 설명은 다르지만 빈 폴더(이 예에서는 rmdir 없이)를 삭제하려고 하면 동일한 결과가 나타납니다.

-f와 비교하여 오류나 아무것도 인쇄하지 않습니다 -r. 이것이 유일한 차이점입니까, 아니면 한 옵션이 다른 옵션보다 나은 특정 유형의 상황이 있습니까? 아니면 이 옵션 중 하나가 작동하지 않고 다른 옵션은 작동하지 않는 상황이 있습니까?

답변1

CentOS의 매뉴얼 페이지에는 다음과 같이 나와 있습니다.

-f, --force
    ignore nonexistent files, never prompt

-r, -R, --recursive
    remove directories and their contents recursively

내가 수집한 내용에 따르면(아래 의견 덕분에) -r-f플래그에 대해 다음이 적용됩니다.

-아르 자형

  • 숨겨진 파일 및 하위 디렉터리를 포함하여 디렉터리의 내용을 반복적으로 삭제합니다.
  • 구성에 따라 권한을 요청할 수도 있습니다(예: 플래그를 사용할 때 --interactive). 일부 배포판에서는 기본적으로 이 작업을 수행합니다.
  • 디렉토리를 제거하는 데 사용할 수 있습니다. 그렇게 하려면 디렉토리 경로를 제공하기만 하면 됩니다(예: /path/to/directory).

-에프

  • 디렉터리의 내용을 반복적으로 삭제하지 않고 지정된 경로(예: example/file1또는 example/*)와 직접 일치하는 파일만 제거합니다.
  • 하위 디렉터리를 삭제하지 않습니다.
  • yes to all기본적으로 Windows에서는 권한을 요청하지 않습니다.

다음은 몇 가지 예입니다. 모두 다음 구조로 시작합니다.

example/
  file1
  file2
  file3
  .file
  dir/
    file1
    file2
    file3
    .file

이 예제에서는 기본적으로 자세한 정보 표시 및 대화형 모드를 활성화했습니다. 일부 배포판에서는 이 작업을 수행하지만 다른 배포판에서는 수행하지 않습니다.

예를 들어

$ rm example
rm: cannot remove `example': Is a directory

보시다시피 rm기본적으로 디렉터리를 제거하지 않습니다.

rm 예 -f

$ rm example -f
rm: cannot remove `example': Is a directory

플래그를 사용해 -f도 디렉토리를 제거할 수는 없습니다.

rm 예 -r

$ rm example -r
rm: descend into directory `example'? yes
rm: remove regular empty file `example/file3'? yes
  removed `example/file3'
rm: remove regular empty file `example/file2'? yes
  removed `example/file2'
rm: descend into directory `example/dir'? yes
rm: remove regular empty file `example/dir/.file'? yes
  removed `example/dir/.file'
rm: remove regular empty file `example/dir/file3'? yes
  removed `example/dir/file3'
rm: remove regular empty file `example/dir/file2'? yes
  removed `example/dir/file2'
rm: remove regular empty file `example/dir/file1'? yes
  removed `example/dir/file1'
rm: remove directory `example/dir'? yes
  removed directory: `example/dir'
rm: remove regular empty file `example/file1'? yes
  removed `example/file1'
rm: remove directory `example'? yes
  removed directory: `example'

보시다시피 모든 단일 파일과 디렉터리에 대한 권한을 요청하며 숨겨진 파일도 제거됩니다.

rm 예제/* -f

$ rm example/* -f
rm: cannot remove `example/dir': Is a directory
removed `example/file1'
removed `example/file2'
removed `example/file3'

여기서는 권한을 요청하지 않으며 디렉터리도 삭제되지 않으며 숨겨진 파일도 삭제되지 않습니다.

rm 예/* -r

$ rm example/* -r
rm: descend into directory `example/dir'? yes
rm: remove regular empty file `example/dir/.file'? yes
  removed `example/dir/.file'
rm: remove regular empty file `example/dir/file3'? yes
  removed `example/dir/file3'
rm: remove regular empty file `example/dir/file2'? yes
  removed `example/dir/file2'
rm: remove regular empty file `example/dir/file1'? yes
  removed `example/dir/file1'
rm: remove directory `example/dir'? yes
  removed directory: `example/dir'
rm: remove regular empty file `example/.file'? yes
  removed `example/file'
rm: remove regular empty file `example/file1'? yes
  removed `example/file1'
rm: remove regular empty file `example/file2'? yes
  removed `example/file2'
rm: remove regular empty file `example/file3'? yes
  removed `example/file3'

여기서는 숨겨진 파일을 포함하여 예제 디렉터리(디렉터리 자체가 아님)의 내용이 제거됩니다.

답변2

rm -r mydirmydir모든 내용과 함께 디렉토리를 제거합니다 .

rm -f mydir디렉토리는 제거되지 않습니다(비어 있거나 내용이 포함되어 있지 않음). 오류가 보고됩니다.

  • BSD/OS X에서:

    rm: mydir/: is a directory
    
  • GNU/리눅스에서:

    rm: cannot remove 'mydir': Is a directory
    

주어진 인수에 관계없이 동작하는 명령 에 대한 가능한 설명 rm(가능성이 가장 높은 것부터 가장 낮은 것까지):

  1. 쉘 별명이 rm정의되어 있고 정의된 일부 매개변수(예: )가 명령 -r에 전달됩니다.rm
  2. rm실제 명령에 추가 매개변수도 전달하는 스크립트를 호출하고 있습니다.
  3. 사용자 정의 rm실행 파일이 있습니다

를 실행하여 처음 두 가지 가능성을 확인할 수 있습니다 /bin/rm -f mydir.

관련 정보