2012-08-15 32 views
6

Preguntas

  • ¿Cuál es la diferencia entre los rm -d y rm -R comandos en Bash?
  • ¿Cuál debo usar?

detalles

De acuerdo con la página del manual para el comando rm:Bash: ¿Cuál es la diferencia entre "rm -d" y "rm -R"?

  • rm -d intentos para eliminar los directorios, así como otros tipos de archivos .
  • rm -R intenta eliminar la jerarquía de archivos enraizada en cada archivo argumento. La opción -R implica la opción -d.

Ahora, soy consciente de que la última declaración (-R implica -d), que puede parecer a responder a mi pregunta. Sin embargo, aún me pregunto por qué existen ambos indicadores de comando en primer lugar, si supuestamente son idénticos en lo que hacen.

Además, como todavía estoy en el proceso de aprender Bash, creo que es bueno saber qué opción es la preferida entre los programadores de Bash (convencionalmente) y por qué.

+0

¿Qué raro es que ustedes están discutiendo? Mi pantano estándar GNU coreutils rm no tiene una opción -d. – themel

+1

La versión BSD de 'rm' tiene' -d'. Mientras que el estándar POSIX dice que 'rm' debe comportarse de forma idéntica a' rmdir' cuando el destino es un directorio, la versión BSD sigue el comportamiento histórico de 'rm' a menos que use' -d'. – chepner

+0

La opción '-d' no está en [POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/rm.html), por lo que esta pregunta debe etiquetarse para el sistema específico donde se realiza la pregunta dirigido. –

Respuesta

9

Por lo general, rm no eliminará un directorio, incluso si está vacío. rm -d solo hace que rm actúen como rmdir. Todavía se niega a eliminar el directorio si no está vacío, pero lo hará si está vacío.

rm -R es la eliminación recursiva completa, eliminando el directorio y todos sus contenidos.

Nunca he usado -d, ya que no sabía que existía y siempre uso rmdir. Usaría rmdir/rm -d si solo quiere eliminar el directorio si, de hecho, está vacío. Guarde rm -R para cuando sepa que está intentando eliminar un directorio y todos sus contenidos.

3

La opción -d es particular de la implementación BSD de rm, que es la que probablemente encuentre en su Mac. No está presente en la implementación de GNU que encontrará en los sistemas Linux.

Si está buscando la opción preferida, sería utilizar -r (minúscula) para eliminar árboles enteros y rmdir para eliminar directorios individuales, que se encuentra que es un código que es más portátil.

-1

Para que quede claro, debe nunca use rm -d. Suponiendo que no solo falla con un mensaje de error de "Operación no permitida", eliminará el directorio sin eliminando el contenido. En un directorio vacío es el mismo que rmdir. En un directorio no vacío crea una incoherencia en el sistema de archivos que requiere reparación por fsck o por algún hackeo manual muy inteligente.

Es una opción estúpida que nunca debería haber existido.La gente de BSD tomaba algunas drogas malas cuando lo agregaban. rm -r habían estado en UNIX desde al menos 1973, y rmdir desde 1971.

+2

'rm -d' falla con" Directorio no vacío "si el directorio no está vacío. Tal vez el comportamiento cambió en algún momento. – chepner

0

rm borrará archivos, pero he tenido problemas tratando de eliminar el directorio, por lo que deben ser marcadas con alguna opción,

rm -f obligará archivo quita sin pedir confirmación

-R rm eliminará directorio, pero en mi caso se solicita la confirmación, pero porque tengo tantos archivos, seguí escribiendo y e y que fue tomada por la eternidad

rm -Rf fue mi solución final, forzó a eliminar el directorio sin preguntar g para la confirmación

Cuestiones relacionadas