¿Es posible mover archivos por orden de tamaño?
Como:
mv /path/to/x /path/to/y
Donde xey son directorios. Sin embargo, los archivos más pequeños se mueven primero. O archivos más grandes primero.
Además, ¿hay alguna razón para no hacer esto?
Respuesta1
Podrías hacerlo así (no probado):
for file in `ls --sort=size /path/to/x/*`; do mv $file /path/to/y/; done
Puede invertir la clasificación agregando el parámetro --reverse a ls. Si los nombres de los archivos contienen espacios, es posible que tengas que citar $file:
... mv "$file" /path/to/y/ ...
Si los nombres de los archivos pueden contener comillas dobles, estás en un verdadero problema.
También es posible que lo siguiente funcione, pero depende de la implementación de mv y es posible que tampoco funcione para muchos archivos (y todavía tiene problemas con espacios y/o comillas en los nombres de archivos):
mv `ls --sort=size /path/to/x/*` /path/to/y/
Usted pregunta: "¿hay alguna razón para no hacer esto?" La pregunta debería invertirse. ¿Hay alguna razón para hacer esto? Si tienes una razón, adelante y hazlo.
Respuesta2
Si estás moviendo los archivosdentro de un único sistema de archivos, entonces los datos de los archivos no se mueven; solo los nombres de los archivos se mueven entre directorios. Por lo tanto, puede mover un archivo de 10 gigabytes instantáneamente (dentro de un único sistema de archivos). Por lo tanto, tomarse la molestia de encontrar los tamaños de todos los archivos para poder mover primero los más pequeños sería una pérdida de tiempo (en este caso).
Respuesta3
Una razón para no hacerlo es que requeriría crear un índice de todos los archivos antes de moverlos. Luego obtenga el tamaño de todos esos archivos y ordénelos.AntesIncluso puedes empezar a copiar.
Y entonces no hay garantía de que el estado que calculó antes del proceso de copia sea exactamente el mismo.duranteel proceso de copia, haciéndolo inútil.