directory – ¿Cómo mover un directorio a un directorio con el mismo nombre?

Pregunta:

Tengo un directorio foo con varios archivos:

.
└── foo
    ├── a.txt
    └── b.txt

y quiero moverlo a un directorio con el mismo nombre:

.
└── foo
    └── foo
        ├── a.txt
        └── b.txt

Actualmente estoy creando una bar directorio temporal, muevo foo a la bar y luego cambio el nombre de la bar a foo :

mkdir bar
mv foo bar
mv bar foo

Pero esto se siente un poco engorroso y tengo que elegir un nombre para la bar que aún no está en uso.

¿Existe una forma más elegante o sencilla de lograrlo? Estoy en macOS si eso importa.

Respuesta:

Para crear de forma segura un directorio temporal en el directorio actual, con un nombre que aún no está en uso, puede usar mktemp -d así:

tmpdir=$(mktemp -d "$PWD"/tmp.XXXXXXXX)   # using ./tmp.XXXXXXXX would work too

El comando mktemp -d creará un directorio en la ruta dada, con las X -es al final del nombre de la ruta reemplazadas por caracteres alfanuméricos aleatorios. Devolverá el nombre de la ruta del directorio que se creó, y almacenamos este valor en tmpdir . 1

Esta variable tmpdir podría usarse cuando siga el mismo procedimiento que ya está haciendo, con la bar reemplazada por "$tmpdir" :

mv foo "$tmpdir"
mv "$tmpdir" foo
unset tmpdir

El unset tmpdir al final simplemente elimina la variable.


1 Por lo general, uno debería poder establecer la variable de entorno TMPDIR en una ruta de directorio donde se desea crear archivos o directorios temporales con mktemp , pero la utilidad en macOS parece funcionar de manera sutilmente diferente con respecto a esto que la misma utilidad en otros BSD systems, y creará el directorio en una ubicación totalmente diferente. Sin embargo, lo anterior funcionaría en macOS. El uso de tmpdir=$(TMPDIR=$PWD mktemp -d) o incluso tmpdir=$(TMPDIR=. mktemp -d) , un poco más conveniente, solo sería un problema en macOS si el directorio temporal predeterminado estuviera en otra partición y el directorio foo contenía muchos datos (es decir, sería lento).

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım