
El comando single bash >| foo
crea un archivo vacío foo
, sin importar si anteriormente no estaba vacío, estaba vacío o faltaba. (Falla si era de solo lectura o un directorio).
¿Existe un comando único similar para crear un directorio vacío? Debería funcionar si el directorio estaba allí antes.O no, vacíoO no. Más o menos lo mismo que rm -rf fooDir; mkdir -p fooDir
pero sin violar No te repitas. (Es aceptable que falle si los directorios o archivos son de solo lectura).
El contexto es un script que crea un directorio para almacenar su salida, pero borra las salidas de cualquier ejecución anterior.
Respuesta1
Creo que la respuesta es no. No existe un comando único para lo que estás pidiendo,al menossegún estos dos enlaces:
- https://askubuntu.com/questions/517329/overwrite-an-existing-directory
- https://stackoverflow.com/questions/23698183/how-to-force-cp-to-overwrite-directory-instead-of-creating-another-one-inside
Todo lo que puedo decir es usar los dos comandos separados. Puede que sea feo e "inconveniente", pero es 99% probable que sea la única forma de hacerlo.
Respuesta2
Primero, busque un directorio vacío. No hayuniversalmanera de hacerlo, pero puedes crear uno o encontrar un candidato probable con find /var -type d -empty | xargs ls -ltd
. Por ejemplo, en Ubuntu 14, /var/lib/ntpdate
ha estado vacío durante años. Otra apuesta segura es /etc/ppp/resolv
.
Entonces el único comando es rsync -a --delete /var/lib/ntpdate/ fooDir
. La barra diagonal final es importante. Desafortunadamente, sin una solución universal /dev/nullDir
, es probable que esta solución desconcierte al recién llegado. Entonces, si su secuencia de comandos tiene que hacer esto muchas veces, vale la pena crearla primero /tmp/emptyDir
y luego usarla con rsync.