Как переместить каталог, файл файлом? (вместо “копии затем удаляют”),

Я думаю, не оказывая поддержку для выделения, контролирующего после того, как программа запускается непосредственно в исходном коде, Вам не повезло. Вот две причины, о которых я могу думать:

  • Средства проверки "кучи" инициализируют, когда программа начинается. Некоторое предложение способность настроить точную синхронизацию, но переменные среды, которые запускают их, должно быть установлено когда прогоны программы. Это вызвано тем, что они смотрят, чтобы удостовериться, что каждое выделение имеет соответствующее освобождение, и они скучали бы по некоторым иначе.
  • "Куча", проверяющая обычно, требует поднятых полномочий или рычагов, чтобы быть обеспеченной операционной системой. Если те рычаги не обеспечиваются во время программы, запускаются, средства проверки "кучи" не могут усилить их. Я не полагаю, что Ose обеспечивают эти полномочия после того, как рассматриваемая программа запущена.

Если, однако, Вы - программа, работает в виртуальной машине, та среда может оказать поддержку для контроля выделений. Я знаю, что Java имеет несколько контрольных инструментов выделения и сборки "мусора" (как visualVM) что присоединение к запущению программ или VMs.

20
17.05.2013, 01:33
1 ответ

Если Вы имеете rsync (удалите --dry-run сделать это для реального):

rsync --dry-run --remove-source-files -avHAX /unencrypted/ /encrypted

Иначе, с помощью bash4 + и статистика GNU:

#!/bin/bash

set -e

shopt -s nullglob globstar

for from in /unencrypted/**/*; do
    to="${from/\/un//}"
    if [[ -d "$from" ]]; then
        echo mkdir -p "$to"
        echo chmod "$(stat -c %a "$from")" "$to"
        echo chown "$(stat -c %u:%g "$from")" "$to"
    else
        echo cp -a "$from" "$to" && echo rm "$from"
    fi
done

echo rm -r /unencrypted

Для выполнения его для реального удалить echo от каждой команды.

20
27.01.2020, 19:44
  • 1
    я люблю rsync идею! По-видимому, файлы действительно удалены, когда они перемещены: superuser.com/questions/405761 –  Nicolas Raoul 16.05.2013, 10:09
  • 2
    @NicolasRaoul, Если я вспоминаю правильно, удаления, буферизуется, но это близко к непосредственному, копируют/удаляют. –  Chris Down 16.05.2013, 10:10
  • 3
    Блоки хорошо для меня, пока каждый блок веса меньше чем 50 ГБ. метод –  Nicolas Raoul 16.05.2013, 10:12
  • 4
    Не Был бы необходимо удалить --dry-run из rsync командной строки, также? –  a CVn 16.05.2013, 10:41
  • 5
    @meduz v является дополнительным и просто печатает имена файлов, когда они передаются. aHAX требуется, чтобы сохранять все возможные атрибуты файла- a архив, HAX "сохраняют hardlinks, ACLs и расширенные атрибуты". –  Chris Down 23.05.2013, 07:19

Теги

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