Можно ли перемещать файлы в порядке их размера?

Подобно:

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

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

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

3 ответа3

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/

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

1

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

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .