Tengo un nombre de directorio fooubicado en ~/Desktop. Supongamos que quiero crear un directorio desde una terminal con el mismo nombre y en la misma ubicación. Cuando lo intenté mkdirme dio un error:
mkdir: cannot create directory `/home/nux/Desktop/foo': File exists
Eso tiene sentido, pero quiero reemplazar foosi existe. Miré a través man mkdirpero no hay ninguna opción que haga eso.
Entonces, ¿cómo sobrescribir el foodirectorio?
¿Por qué no mkdirtiene una opción para hacer esto?

foocomo en eliminar todo el contenido de la misma?mkdirtiene una-popción que ignora si el directorio existe.Respuestas:
Si su objetivo es ejecutar un comando de una línea que:
~/Desktop/foovuelve a crear el directorio si ya existe.~/Desktop/foosi 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").-findicador para eliminarlos sin solicitar al usuario de forma interactiva. Esto está bien, pero recomiendo ser especialmente cuidadosorm -rf .... Verman rmpara más detalles.rmcomando termine antes de que semkdirejecute el comando; esta es la razón para usar en;lugar de&. (Un comando anterior se&ejecuta de forma asíncrona en segundo plano).mkdircomando se ejecute cuando elrmcomando tenga éxito; esta es la razón para usar en;lugar de||.mkdircomando se ejecute cuando elrmcomando falla (por lo general, el error significará que el directorio ya no existía); esta es la razón para usar en;lugar de&&.rmcomando puede fallar incluso cuando el directorio ya existía, en cuyo caso elmkdircomando también fallará, pero los mensajes de error tendrán sentido y probablemente no sea necesario agregar un paso intermedio para verificarfoola 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
rsyncpara 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 .mkdircrea 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.rmdirni siquiera elimina los directorios que tienen archivos (que no sean directorios).rmtiene una-ropción, lo cual tiene sentido ya quermse 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 ejecutarrmcomandos).fuente
No, no hay un solo comando para hacer lo que está pidiendo.
¿Por qué?
En este caso, los comandos
mkdiryrmhacen lo que necesita y funcionan bien juntos, ya querm -rtambién eliminarán el directorio, por lo que un subsiguientemkdircreará 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
-res 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 sonchmodychown.Ambigüedad.
mkdirsignifica hacer directorio. No eliminar y hacer directorio. Y dado que elrmcomando es para eliminar cosas, no hay necesidad dermdirpoder 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:
-dCompruebe si ya existe un directorio con ese nombre. Si es así, bórrelo.-fVerifique 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