Измените размер раздела / home и переместите / var / www на новый раздел

Предполагая, что в именах файлов никогда не будет тире - или прописных T, вы можете построить следующий цикл bash:

for f in *
do
   date=$(tmp=${f#*-};echo ${tmp%T*})
   time=$(tmp=${f#*T};echo ${tmp%-*})
   suffix=${f##*-}
   mkdir -p ${date}/${time}/${suffix}
   mv $f ${date}/${time}/${suffix}/
done

Это основной синтаксис расширения параметров bash, согласно man-странице:

 ${параметр#слово}
 ${параметр#слово}
 Удаление совпадающего префиксного шаблона. Слово расширяется для получения шаблона так же, как и при расширении имени пути. Если паттерн
 совпадает с началом значения параметра, то результатом расширения будет расширенное значение парамет-
 eter с удалением самого короткого (в случае ``#'') или самого длинного (в случае ``##'') шаблона.
 Если параметр равен @ или *, операция удаления шаблона применяется к каждому позиционному параметру по очереди, и расширением является результирующий список.
 ется результирующий список. Если параметр представляет собой переменную массива, подзаписанную @ или *, операция удаления шаблона
 применяется к каждому члену массива по очереди, а расширением является результирующий список.

 ${параметр%слово}
 ${параметр%%слово}
 Удаление совпадающего суффиксального шаблона. Слово расширяется для получения шаблона так же, как и при расширении имени пути. Если паттерн
 шаблон совпадает с трейлинг-частью расширенного значения параметра, то результатом расширения будет расширенное значение параметра
 значение параметра с самым коротким совпадающим шаблоном (случай ``%'') или самым длинным совпадающим шаблоном (случай ``%%'').
 удалено. Если параметр равен @ или *, операция удаления шаблона применяется к каждому позиционному параметру по очереди,
 и расширением является результирующий список. Если параметр - переменная массива, подзаписанная @ или *, операция удаления шаблона применяется к каждому члену массива.
 применяется к каждому члену массива по очереди, а расширением является результирующий список.

Я использовал временную переменную в качестве заполнителя, поскольку bash не позволяет прямое вложение операции расширения.

date=$(tmp=${f#*-};echo ${tmp%T*})
$f - имя текущего файла
tmp={f#*-} : удалить все до ПЕРВОГО -
В данный момент tmp содержит {дата}T{время}-{суффикс}
${tmp%T*} : удалить все после T (включительно)

2
15.12.2016, 22:14
1 ответ

Как отметил в комментарии @jordanm, гораздо безопаснее создать символическую ссылку на новое место в существующем разделе, чем пытаться изменить размер разделов, сохранив их текущее содержимое.

В вашей ситуации это может быть достигнуто с помощью чего-то вроде:

cd /var
sudo mv -i www /home/
sudo ln -s /home/www .

(в качестве примечания: обычно рекомендуется включать флаг -i в mv в чтобы получить предупреждающее сообщение, если вы собираетесь что-то перезаписать, особенно если вы вводите mv с помощью sudo )

2
27.01.2020, 22:10

Теги

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