Назад | Перейти на главную страницу

Bash: mv-каталог по одному

Я пытаюсь переместить все подкаталоги папки в другой общий ресурс на том же сервере. Если я сделаю mv *, у меня закончится место, поскольку папки не будут удалены, пока все папки не будут перенесены. Поэтому я хотел бы создать короткий сценарий, который будет проходить через каждый из них. Есть ли у кого-нибудь пример, на который я могу посмотреть? Я искал, но не могу найти именно то, что ищу.

Вы могли бы использовать rsync(1):

rsync --remove-source-files /path/to/source /path/to/destination

Это удалит успешно переданные файлы из исходного пути.

Вы хотите for.

Пример (это просто покажет, что будет сделано):

for item in *; do
    echo mv "$item" /destination/directory
done

Когда вы счастливы, удалите echo сделать это по-настоящему.

Используя mv Команда для перемещения файлов с одного тома на другой - это операция копирования. Но как бы вам не хватило места на исходном томе? Вам не хватило бы места только на цель том, если этот том меньше, чем общий размер перемещаемых файлов. Но в любом случае вы только освобождаете пространство на исходном томе, а не выделяете на нем больше места.

Если вы используете mv чтобы «переместить» файлы из одного каталога в другой на том же томе, это просто операция переименования. Вы не копируете данные, вы просто настраиваете указатели файлов, чтобы представить другую иерархию каталогов. Вы не собираетесь исчерпать пространство, потому что данные файла остаются там, где они были.

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

ls -1 | xargs -n1 -i echo mv '{}' destination

Просто уберите эхо, когда будете счастливы.

Просто для справки, я считаю mv команда не выполняет операцию копирования и удаления, т.е.

mv /home/foo /home/bar

существуют одновременно в течение короткого периода. Это больше похоже на переименование. Существенно изменить учет файловой системы, чтобы то, что указывало на /home/foo теперь указывает на /home/bar без фактического физического перемещения данных на диске из одного места в другое или без копирования и удаления из предыдущего места.