É possível mover arquivos por ordem de tamanho?
Como:
mv /path/to/x /path/to/y
Onde x e y são diretórios. No entanto, os arquivos menores são movidos primeiro. Ou arquivos maiores primeiro.
Além disso, há uma razão para não fazer isso?
Responder1
Você poderia fazer assim (não testado):
for file in `ls --sort=size /path/to/x/*`; do mv $file /path/to/y/; done
Você pode reverter a classificação adicionando o parâmetro --reverse a ls. Se os nomes dos arquivos contiverem espaços, talvez seja necessário citar $file:
... mv "$file" /path/to/y/ ...
Se os nomes dos arquivos contiverem aspas duplas, você está com sérios problemas.
Também é possível que o seguinte funcione, mas depende da implementação do mv e também pode não funcionar para muitos arquivos (e ainda tem problemas com espaços e/ou aspas nos nomes dos arquivos):
mv `ls --sort=size /path/to/x/*` /path/to/y/
Você pergunta: "há uma razão para não fazer isso?" A questão deveria ser invertida. Existe uma razão para fazer isso? Se você tiver um motivo, vá em frente e faça-o.
Responder2
Se você estiver movendo os arquivosdentro de um único sistema de arquivos, os dados nos arquivos não serão movidos - apenas os nomes dos arquivos serão movidos entre os diretórios. Assim você pode mover um arquivo de 10 gigabytes instantaneamente (dentro de um único sistema de arquivos). Assim, dar-se ao trabalho de encontrar os tamanhos de todos os arquivos apenas para que os menores possam ser movidos primeiro seria uma perda de tempo (neste caso).
Responder3
Uma razão para não fazer isso é que seria necessário criar um índice de todos os arquivos antes de movê-los. Em seguida, obtenha o tamanho de todos esses arquivos e classifique-os.Antesvocê pode até começar a copiar.
E então não há garantia de que o estado que você calculou antes do processo de cópia seja exatamente o mesmoduranteo processo de cópia, tornando-o inútil.