Você pode mover arquivos priorizando arquivos pequenos?

0

É possível mover arquivos por ordem de tamanho?

Gostar:

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, existe uma razão para não fazer isso?

Annan
fonte
1
Não é feito trivialmente. Há motivos para fazer isso?
Daniel Andersson

Respostas:

1

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 de arquivos contiverem espaços, pode ser necessário citar $ file:

... mv "$file" /path/to/y/ ...

Se os nomes de arquivos contiverem aspas duplas, você está com um problema real.

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 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ê tiver um motivo, vá em frente e faça-o.

Antonis Christofides
fonte
1

Se você estiver movendo os arquivos em 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). Portanto, encontrar o tamanho de todos os arquivos para que os menores possam ser movidos primeiro seria uma perda de tempo (neste caso).

Fran
fonte
0

Um motivo para não fazer isso é que seria necessário criar um índice de todos os arquivos antes de mover. Em seguida, obtenha o tamanho de todos esses arquivos e os ordene. Antes mesmo de começar a copiar.

E não há garantia de que o estado que você calculou antes do processo de cópia seja exatamente o mesmo durante o processo de cópia, tornando-o inútil.

Der Hochstapler
fonte