Не без резервного копирования, повторного разделения, mkfs и восстановления, по крайней мере, c0d0p[56789] (принимающий разделы пронумерованы последовательно согласно дисковому расположению).
Если необходимо было перейти ко всему усилию по выполнению этого, израсходовать немного больше усилия установить и настроить lvm и использовать логические тома, а не разделы - это даст Вам намного больше гибкости в следующий раз, когда необходимо вырастить или уменьшить файловую систему (или если Вы добавляете второй диск).
(также, трудно видеть, почему любой даже потрудился бы делать много небольших разделов на маленьком диске в эти дни. Это раньше было обычной практикой, но диски раньше были крошечными также. в эти дни стычка и неудобство, это вызывает больше, чем, перевешивают незначительные преимущества),
Так, короткий ответ нет.
Однако можно сделать каталог на / приложениях (например,/apps/stuff) и move+symlink файлы от / до/apps/stuff. Например:
mkdir /apps/stuff
mv /usr/share/doc /apps/stuff
ln -s /apps/stuff/doc/ /usr/share/
пока Вы не перемещаете файлов или каталогов, которые требуются во время начальной загрузки (включая все / и т.д., / мусорное ведро,/sbin), все будет продолжать работать (хотя Вам, вероятно, придется перезагрузить или по крайней мере уничтожить и перезапустить некоторые процессы, если какой-либо из файлов, которые Вы переместили, считается открытый некоторым процессом),
BTW вместо mv, это - обычно лучшая идея скопировать файлы, пока Вы сохраняете владельца, группу и полномочия. например, используйте cp -a
или rsync
или даже старая рабочая лошадь cd /path/to/src ; tar cf - . | (cd /path/to/dest ; tar xf -)
Затем, когда файлы скопировали, или удаляют их (или перемещают их из пути временно), и создайте символьную ссылку. когда это сделано, протестируйте это, все работает правильно - если это, затем удалите оригинал с корневой фс, например.
mkdir /apps/stuff
rsync -ax /usr/share/doc /apps/stuff
mv /usr/share/doc /usr/share/doc.bak
ln -s /apps/stuff/doc/ /usr/share
# do your testing now
rm -rf /usr/share/doc.bak
Обратите внимание, что важно оставить запаздывание / от исходного аргумента в rsync здесь (т.е. использование /usr/share/doc
вместо /usr/share/doc/
) иначе rsync будет думать, что Вы хотите скопировать все в/usr/share/doc/к/apps/stuff, а не к/apps/stuff/doc
Опасность: совершенно законно для путей Unix содержать новые строки. Если какой-либо из Ваших путей содержит новые строки, это потенциально опасно. Рассмотреть использование \0
разделить имена файлов вместо этого при помощи GNU find
-print0
опция и затем обработка их использующий GNU xargs
' -0
опция.
Можно использовать следующее:
files=()
while IFS= read -r file; do
files+=( "$file" )
done < ind_soapr_db40.txt
rm -r -- "${files[@]}"
Вы могли звонить rm
каждый раз непосредственно в for
цикл, но это было бы медленнее, чем заполнение списка файлов и обработки их в одном вызове rm
.
Если у Вас есть bash4 +, можно вместо этого использовать mapfile
:
mapfile -t files < ind_soapr_db40.txt
rm -r -- "${files[@]}"
Эта острота Perl должна работать, даже если Ваши имена файлов имеют новые строки:
perl -000ne 'unlink (/(.+?\/[^\/]+)\n/sg);' list
Для рекурсивного удаления каталогов и их содержания попробуйте это:
perl -000ne 'use File::Path; rmtree (/(.+?\/[^\/]+)\n/sg);' list
-000
: активируйте режим абзаца, читает весь файл сразу.-ne
: считайте файл, данный как аргумент (-n
) и запущенный скрипт, мимо которого проходят -e
.
/(.+?\/[^\/]+)\n/sg
: ищите любой символ, сопровождаемый a /
, затем как многие не -/
символы как возможные (включая новые строки благодаря s
модификатор) до следующей новой строки. Так как имена файлов не могут содержать /
, это должно выбрать целый путь и отдельного EA
Передайте соответствия (имена файлов), возвращенные регулярным выражением выше к unlink()
удалить их.