Del manual:
-f, --fuerza
ignorar archivos inexistentes, nunca preguntar
-r, -R, --recursivo
eliminar el contenido de los directorios de forma recursiva
Aunque la descripción de esta opción es diferente, al intentar eliminar una carpeta vacía (sin rmdir para este ejemplo) se obtiene el mismo resultado.
-f
no imprime error ni nada en comparación con -r
, ¿es esta la única diferencia o hay un tipo específico de situaciones en las que una opción es mejor que otra o situaciones en las que una de estas opciones simplemente no funcionará mientras que la otra sí?
Respuesta1
Esto es lo que dice la página de manual en CentOS:
-f, --force
ignore nonexistent files, never prompt
-r, -R, --recursive
remove directories and their contents recursively
Por lo que he recopilado (gracias a algunos comentarios a continuación), lo siguiente es cierto para las banderas -r
y -f
:
-r
- elimina recursivamente el contenido de un directorio, incluidos archivos y subdirectorios ocultos
- Dependiendo de su configuración, puede solicitar permiso (por ejemplo, al usar la
--interactive
bandera). Algunas distribuciones hacen esto de forma predeterminada. - se puede utilizar para eliminar un directorio, si desea hacerlo, simplemente proporcione la ruta del directorio (por ejemplo
/path/to/directory
:)
-F
- no elimina recursivamente el contenido de un directorio, solo elimina archivos que coinciden directamente con la ruta dada (por ejemplo
example/file1
oexample/*
). - Nunca elimina subdirectorios
- Nunca pide permiso, básicamente
yes to all
en Windows.
A continuación se muestran algunos ejemplos, todos ellos comienzan con la siguiente estructura:
example/
file1
file2
file3
.file
dir/
file1
file2
file3
.file
Habilité el modo detallado y interactivo de forma predeterminada para estos ejemplos. Algunas distribuciones hacen esto mientras que otras no.
ejemplo de rm
$ rm example
rm: cannot remove `example': Is a directory
Como puede ver, rm
no elimina directorios de forma predeterminada.
ejemplo rm -f
$ rm example -f
rm: cannot remove `example': Is a directory
El uso de la -f
bandera todavía no le permite eliminar directorios.
ejemplo 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'
Como puede ver, se le solicita permiso para cada archivo y directorio; los archivos ocultos también se eliminan.
ejemplo rm/* -f
$ rm example/* -f
rm: cannot remove `example/dir': Is a directory
removed `example/file1'
removed `example/file2'
removed `example/file3'
Aquí no se le pide permiso, no se eliminan directorios ni archivos ocultos.
ejemplo 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'
Aquí, se elimina el contenido del directorio de ejemplo (no el directorio en sí), incluidos los archivos ocultos.
Respuesta2
rm -r mydir
eliminará el mydir
directorio con todo su contenido.
rm -f mydir
no eliminará un directorio (ni vacío ni con contenido). Informará un error:
en BSD/OS X:
rm: mydir/: is a directory
en GNU/Linux:
rm: cannot remove 'mydir': Is a directory
Posibles explicaciones para que el rm
comando se comporte independientemente de los argumentos dados (del más al menos probable):
- tienes un alias de shell
rm
definido y pasa algunos parámetros definidos (como-r
) alrm
comando - está llamando a un script llamado
rm
que también pasa parámetros adicionales al comando real - tienes un
rm
ejecutable personalizado
Puedes verificar las dos primeras posibilidades ejecutando /bin/rm -f mydir
.