¿Cómo puedo mover archivos hacia arriba en un directorio donde puede haber cientos o miles de archivos en el directorio, y es posible que no esté seguro de si hay engaños ..
? ¿Qué método usarías?
La forma de manejar los engaños variará, a veces sobrescribiremos, a veces necesitamos estar más seguros. IO puede ser importante porque estos son servidores de producción. Pero dada la cantidad, una solicitud de archivos no duplicados no es una opción. La preservación de los permisos y las marcas de tiempo, etc., es importante. Por lo general, no sabremos cuáles son los datos.
Ah, y su uso mv
no es obligatorio rsync
, las cp
soluciones son bienvenidas.
nota: estamos ejecutando CentOS 5.5, así que avíseme si no funcionará allí debido a que es una característica más reciente ...
fuente
mv
si nos preocupa la preservación en el caso de ... y si ya hemos hecho una copia de seguridad. Esta pregunta es bastante abierta. Solo estoy buscando buenas opciones, y tal vez un comentario sobre si puede morderte o no y cómo.mv * ../
omv -i * ../
?Respuestas:
Recomendaría usar rsync del padre:
que hará una copia de seguridad de todos los archivos duplicados existentes en padre a archivo original .
fuente
-a
implica-r
-l
paracp
)-H
o--hard-links
para rsync para preservar los enlaces duros.--link-dest=DIR
indicador para lograr este comportamiento como:rsync -avP --link-dest=/path/to/src /path/to/src/* /path/to/dest/
que se vinculará en dst / cualquier archivo sin cambios entre src y src, en este caso todos los archivos. Por lo general, ve este indicador utilizado cuando desea volver a vincular archivos de copia de seguridad sin copiar sus datos como--link-dest=/most/recent/backup
.Esto copiará todo en el directorio actual al directorio que se encuentra sobre él, conservando todos los permisos, utilizando enlaces duros para minimizar IO si es posible, y en duplicados crea un nombre de archivo ~
después de esto
fuente
En este ejemplo, moverá los archivos de '/ parent / old-dir' a '/ parent':
Por reglas rsync reemplazará dups con archivos más nuevos de
old-dir
.fuente
Puedes probar
que sobrescribirá los archivos duplicados en ...
Puede usar mv -u '{}' para no sobrescribir si el engaño en ... es el mismo o más nuevo
fuente
..
almv '{}' +
comando, ya que el + simplemente se agrega al final.-exec mv -t .. -- {} +
. Portable:-exec sh -c 'mv -- "$@"' _ {} +
.mv -i
solo pregunta si el destino existe.yes n | mv -i …
mueve todos los archivos que no existen en el directorio de destino. En FreeBSD y OSX, puede acortar estomv -n …
.Tenga en cuenta que ninguno de estos combinará un argumento de directorio con un directorio existente con el mismo nombre en el directorio de destino.
Otro tema es cómo actuar sobre todos los archivos en el directorio actual. Hay dos problemas: tomar todos los archivos (
*
omite los archivos de puntos) y no encontrarse con una línea de comando. En Linux (o más generalmente con GNU find y GNU coreutils):Con GNU encuentra pero no GNU coreutils (o GNU coreutils anteriores):
Portablemente:
Como de costumbre, zsh facilita las cosas. No tiene una limitación de longitud de línea de comando internamente, por lo que si usa su
mv
incorporado no necesita preocuparse por eso. Y puede decirle que no ignore los archivos de puntos con elD
calificador glob. Limitación: esto no funciona en los sistemas de archivos (a partir de zsh 4.3.10).fuente
Dije en nuestro ML
obviamente esto no es muy seguro ... sobrescribirá las cosas. Puede tener límites con los que nunca me he encontrado.
fuente
-
. No capturará archivos cuyo nombre comience con.
.La siguiente es una plantilla de Python que he usado con buenos resultados en el pasado.
fuente