Эквивалент mv -t для macOS/bash

Более простым решением, чем повторная -установка ОС с другим расположением разделов или загрузка с загрузочного диска и изменение размеров существующих разделов, может быть использование привязки.

Здесь есть отличный ответ о монтировании привязки:

Скажем ради обсуждения, что ваш сервер Apache занимал все пространство и был внедрен в /var/www.

Используя связанное монтирование, вы можете создать каталог в /home, где смонтировано /dev/sda2, например /home/www, переместить все из /var/wwwв /home/www, а затем связать /home/wwwв /var/www.

bash-# mkdir /home/www
bash-# mv /var/www/* /home/www/
bash-# chown -R $owner:$group /home/www   <-- this step may be optional
bash-# mount --bind /home/www /var/www

Это позволит вам использовать пространство из /dev/sda, как если бы оно было частью /, без необходимости изменять размер каких-либо разделов или даже перезагружать сервер.

Это также означает, что вам не нужно настраивать ничего, что ожидает вещей в /var/www, чтобы искать их в/home/www(сценариях запуска, приложениях, использующих веб-сервер, заданиях cron и т. д. ).

Только не забудьте добавить в/etc/fstab:

/home/www /var/www none defaults,bind 0 0

В противном случае он не сохранится после перезагрузки.

1
26.07.2019, 19:49
2 ответа

Без -tвы должны сохранить целевой каталог в качестве последнего аргумента опции, отличной от -, для mv. Это дает нам два варианта :: либо findпоместить имя файла перед целевым каталогом для mv, либо найти что-то еще, что может сделать то же самое. Итак, либо:

find "$d" -type f -exec mv -i {} "$d" \;

или:

export d; find "$d" -type f -exec sh -c 'exec mv -i "$@" "$d"' sh {} +

В первой команде mvвыполняется для каждого файла. Во втором случае sh -c...выполняется для пакета файлов, а тот, в свою очередь, выполняет mvдля всего пакета. Второй вариант может быть намного быстрее, но поскольку вы используете интерактивное подтверждение, это не будет иметь большого значения.

3
27.01.2020, 23:30

это не имеет ничего общего с bash. Это команда mv.

Вы можете установить gnu mv, чтобы получить опцию -t. В качестве альтернативы см. другие ответы, но с этим дополнительным советом.

На странице руководства показаны эти два режима (Я удалил режим -t)

mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY

Вы можете заметить, что если не указать-T(также, я думаю, только в Gnu mv ), и иметь два аргумента, то грамматика неоднозначна. Неоднозначность разрешается путем проверки последнего файла. Если это каталог, то это 2-я форма, иначе это 1-я форма. Грамматика может быть сделана не -двусмысленной, если поставить /после имени каталога, тем самым форсируя 2-ю форму. Это остановит многие ошибки. К сожалению, единственный способ устранить -неоднозначность первой формы — использовать -T.

0
27.01.2020, 23:30

Теги

Похожие вопросы