Tengo un nombre de directorio foo
ubicado en ~/Desktop
. Supongamos que quiero crear un directorio desde una terminal con el mismo nombre y en la misma ubicación. Cuando lo intenté mkdir
me dio un error:
mkdir: cannot create directory `/home/nux/Desktop/foo': File exists
Eso tiene sentido, pero quiero reemplazar foo
si existe. Miré a través man mkdir
pero no hay ninguna opción que haga eso.
Entonces, ¿cómo sobrescribir el foo
directorio?
¿Por qué no mkdir
tiene una opción para hacer esto?
foo
como en eliminar todo el contenido de la misma?mkdir
tiene una-p
opción que ignora si el directorio existe.Respuestas:
Si su objetivo es ejecutar un comando de una línea que:
~/Desktop/foo
vuelve a crear el directorio si ya existe.~/Desktop/foo
si aún no existe.Entonces puedes usar:
;
es equivalente a una nueva línea, pero le permite ejecutar múltiples comandos en una sola línea (es decir, como un "comando único").-f
indicador para eliminarlos sin solicitar al usuario de forma interactiva. Esto está bien, pero recomiendo ser especialmente cuidadosorm -rf ...
. Verman rm
para más detalles.rm
comando termine antes de que semkdir
ejecute el comando; esta es la razón para usar en;
lugar de&
. (Un comando anterior se&
ejecuta de forma asíncrona en segundo plano).mkdir
comando se ejecute cuando elrm
comando tenga éxito; esta es la razón para usar en;
lugar de||
.mkdir
comando se ejecute cuando elrm
comando falla (por lo general, el error significará que el directorio ya no existía); esta es la razón para usar en;
lugar de&&
.rm
comando puede fallar incluso cuando el directorio ya existía, en cuyo caso elmkdir
comando también fallará, pero los mensajes de error tendrán sentido y probablemente no sea necesario agregar un paso intermedio para verificarfoo
la existencia antes de intentar crearlo.Ver 3.2.3 listas de comandos en el Manual de Referencia de Bash para obtener más información y una explicación acerca de los
;
,&
,||
, y&&
los operadores.Como muru sugirió (y Rinzwind explicó ), le recomiendo que investigue
rsync
para ver si cumple con sus necesidades de respaldo. Hay algunas guías útiles adicionales en la página de documentación de rsync , así como esta guía de Ubuntu rsync .mkdir
crea directorios (el "mk" significa "make" ). Que también elimine recursivamente directorios y todos los archivos en ellos sería malo, ya que violaría el principio de menor asombro de una manera que probablemente conduciría a la pérdida de datos.rmdir
ni siquiera elimina los directorios que tienen archivos (que no sean directorios).rm
tiene una-r
opción, lo cual tiene sentido ya querm
se espera que elimine los archivos (ese es su propósito, por lo tanto, el peligro inherente es intuitivo y los usuarios generalmente deben tener cuidado al ejecutarrm
comandos).fuente
No, no hay un solo comando para hacer lo que está pidiendo.
¿Por qué?
En este caso, los comandos
mkdir
yrm
hacen lo que necesita y funcionan bien juntos, ya querm -r
también eliminarán el directorio, por lo que un subsiguientemkdir
creará el directorio.1 The Art of Unix Programming , Eric S. Raymond, citando a Doug McIlroy.
fuente
El comando para eliminar un directorio es
rm
. Entonces necesitas 2 comandos.Como se muestra en los comentarios, puede encadenarlos con
;
(= hacer ambas cosas incluso si la primera falla) o&&
(= solo mkdir cuando la rm no falla).El
-r
es para eliminar directorios. El primer comando también elimina TODOS los contenidos del directorio. Si esa NO es su intención, tanto rm como mkdir no son lo que está buscando: los permisos sonchmod
ychown
.Ambigüedad.
mkdir
significa hacer directorio. No eliminar y hacer directorio. Y dado que elrm
comando es para eliminar cosas, no hay necesidad dermdir
poder eliminar un directorio.fuente
Para hacer eso de la manera más limpia, uso esto:
Y para usarlo:
Esto asegura que lo que está intentando eliminar es un directorio y no un archivo:
-d
Compruebe si ya existe un directorio con ese nombre. Si es así, bórrelo.-f
Verifique que no exista ningún archivo con este nombre. Si es así, imprima el mensaje de error y salga.Cree el nuevo directorio y echo con éxito, o si falla, echo falla.
fuente