En un entorno GUI, arrastrar y soltar con reemplazar reemplazará los archivos y directorios completos (incluidos los contenidos) con lo que se esté copiando. ¿Hay alguna manera de lograr este mismo resultado intuitivo con el comando 'mv'?
En un entorno GUI, arrastrar y soltar con reemplazar reemplazará los archivos y directorios completos (incluidos los contenidos) con lo que se esté copiando. ¿Hay alguna manera de lograr este mismo resultado intuitivo con el comando 'mv'?
Respuestas:
No con mv
.
La función principal de mv
(a pesar de su nombre) es renombrar un objeto. Una de las garantías que ofrece UNIX es que los cambios de nombre son atómicos: nunca se le permite ver un cambio de nombre parcialmente completado. Esta garantía puede ser muy útil si desea cambiar un archivo ( /etc/passwd
por ejemplo) que otros programas pueden estar mirando y desea que vean la versión antigua o nueva del archivo, y no hay otra posibilidad . Pero un "cambio de nombre recursivo" como el que usted describe rompería esa garantía: podría detenerlo en el medio y tendría un árbol a medio mover y probablemente un desastre, por lo que realmente no encaja con la filosofía de mv
. Esa es mi suposición de por qué mv -r
no existe.
(No importa que los mv
descansos que la filosofía de otras maneras, más pequeñas. Por ejemplo, mv
en realidad hace un cp
seguido de rm
al mover archivos de un sistema de archivos a otro.)
Suficiente filosofía Si desea mover recursivamente ("arrastrar y soltar") un árbol de un lugar a otro en el mismo sistema de archivos , puede obtener la eficiencia y la velocidad de la mv
siguiente manera (por ejemplo):
cp -al source/* dest/ && rm -r source/*
La -l
marca para cp
significa "crear un enlace duro en lugar de copiar": está creando efectivamente un nuevo nombre de archivo que apunta a los mismos datos de archivo que el nombre de archivo anterior. Sin embargo, esto solo funciona en sistemas de archivos que admiten enlaces duros, por lo que cualquier sistema de archivos UNIX-ish nativo está bien, pero no funcionará con FAT.
El &&
medio "solo ejecuta el siguiente comando si el comando anterior tuvo éxito". Si lo desea, puede ejecutar los dos comandos uno a la vez.
No creo que pueda replicar el comportamiento de arrastrar y soltar con el que está describiendo mv
, ya que los subdirectorios no vacíos en el objetivo no serán reemplazados.
Tal vez rsync
? Algo como rsync -a -r source/ target/
? Ejecute -v -n
primero para hacer una ejecución en seco detallada para asegurarse de que hace lo que desea.
Probablemente quieras cambiar la respuesta correcta a esto:
https://github.com/iaindooley/pickdrop
Ejemplo:
decir que tengo:
test/
test/index.php
test/images/
test/images/a.jpg
test/images/thing.png
y quiero mover estas cosas a / sitio
entonces se ve así:
site/
site/public/
site/public/index.php
site/public/a.jpg
site/public/thing.png
Puedo ir:
cd images &&
pick a.jpg thing.png
cd .. &&
pick index.php &&
cd .. &&
mkdir site &&
mkdir site/public &&
cd site/public &&
drop
Esto es literalmente cortar y pegar.