Можно ли перемещать файлы, отдавая приоритет небольшим файлам?

Можно ли перемещать файлы, отдавая приоритет небольшим файлам?

Можно ли перемещать файлы по размеру?

Нравиться:

mv /path/to/x /path/to/y

Где x и y — это каталоги. Однако сначала перемещаются файлы меньшего размера. Или сначала файлы большего размера.

И есть ли причина этого не делать?

решение1

Это можно сделать так (не проверено):

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

Вы можете обратить сортировку, добавив параметр --reverse к ls. Если имена файлов содержат пробелы, вам может потребоваться заключить $file в кавычки:

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

Если имена файлов содержат двойные кавычки, у вас серьезные проблемы.

Также возможно, что следующий вариант сработает, но это зависит от реализации mv и может не сработать для очень многих файлов (и у него все еще есть проблемы с пробелами и/или кавычками в именах файлов):

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

Вы спрашиваете: «есть ли причина не делать этого?» Вопрос должен быть обратным. Есть ли причина делать это? Если у вас есть причина, продолжайте и делайте это.

решение2

Если вы перемещаете файлыв пределах одной файловой системы, то данные в файлах не перемещаются — перемещаются только имена файлов между каталогами. Таким образом, вы можете мгновенно переместить файл размером 10 гигабайт (в пределах одной файловой системы). Таким образом, тратить время на поиск размеров всех файлов только для того, чтобы сначала переместить самые маленькие, было бы пустой тратой времени (в данном случае).

решение3

Причина не делать этого в том, что это потребует от вас создания индекса всех файлов перед перемещением. Затем получите размер всех этих файлов и отсортируйте их.Довы даже можете начать копировать.

И тогда нет никакой гарантии, что состояние, которое вы вычислили до процесса копирования, будет точно таким же.в течениепроцесс копирования, таким образом, делая его бессмысленным.

Связанный контент