Você pode mover arquivos priorizando arquivos pequenos?

0

É 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, arquivos menores são movidos primeiro. Ou arquivos maiores primeiro.

Além disso, há uma razão para não fazer isso?

    
por Annan 28.05.2012 / 18:40

3 respostas

1

Você pode fazer assim (não testado):

for file in 'ls --sort=size /path/to/x/*'; do mv $file /path/to/y/; done

Você pode inverter 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ê estará com problemas reais.

Também é possível que o seguinte funcione, mas depende da implementação de mv e também pode não funcionar para muitos arquivos (e ainda tem problemas com espaços e / ou aspas em nomes de arquivos):

mv 'ls --sort=size /path/to/x/*' /path/to/y/

Você pergunta: "existe uma razão para não fazer isso?" A questão deve ser revertida. Existe uma razão para fazer isso? Se você tem um motivo, vá em frente e faça.

    
por 28.05.2012 / 23:15
1

Se você estiver movendo os arquivos dentro de um único sistema de arquivos , os dados nos arquivos não serão movidos - somente 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, se dar ao trabalho de encontrar os tamanhos de todos os arquivos para que os menores possam ser movidos primeiro seria uma perda de tempo (neste caso).

    
por 29.05.2012 / 00:03
0

Um motivo para não fazer isso é exigir que você crie um índice de todos os arquivos antes de movê-los. Então pegue o tamanho de todos os arquivos e ordene-os. Antes , você 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 é exatamente o mesmo durante o processo de cópia, tornando-o inútil.

    
por 28.05.2012 / 18:42