Перемещение открытого файла к другому устройству

Существует один способ сделать это:

perl -nle 'print if /(_)*.*\1/' pattern.txt

Ouput:

1B2345_
12345-6789
123456789
1_fsdfdfsdf
v_123
v134234_fsdfsd
123456
a1b2c3d4e5

regex /(_)*.*\1/ будет соответствовать всей строке, имеют два или больше, подчеркивают _. Просто инвертируйте условие распечатать строки, которые не соответствуют.

4
07.03.2015, 06:11
3 ответа

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

Предлагая

rsync -av --inplace --no-whole-file /your/local/file.dat /your/remote/file.dat

... или может быть (если монтирование CIFS не согласуется с дельта-передачей) использовать чистый rsync :

rsync -av --inplace --no-whole-file /your/local/file.dat remoteserver:/your/directory/file.dat

Таким образом, вы должны запустить это несколько раз, пока ваш файл 200 ГБ заполняется. Каждый раз, когда вы запускаете его, он постепенно обновляет удаленный файл. Это должно работать даже при случайном обновлении исходного файла. Может быть, вы могли бы запускать это каждые 15 минут. Затем, когда ваш pid закончит, вы запустите его еще раз, и это будет просто быстрая инкрементная дельта.

4
27.01.2020, 20:51

Можно попробовать:

  1. Приостановить приложение strg+z
  2. Перейти в каталог, в котором генерируется файл cd CURRENT_CREATION_DIR
  3. Переместить генерируемый файл в новое место mv ФАЙЛ /путь/к/новому/расположению/
  4. Создать сим-ссылку на файл в новом месте ln - s /path/to/new/location/FILE
  5. continue your application fg [ENTER]

CAUTION:
Может быть, вам следует запустить второй экземпляр вашей программы, сгенерировав тестовый файл, и сначала протестировать описанные выше шаги на тестовом файле. Я не знаю, подходит ли ваше приложение для работы с симлинком, и просто продолжайте. Возможно, программа дает сбой.

1
27.01.2020, 20:51

Предполагая, что сетевой диск смонтирован (NFS или что-то еще),

tail -f -c1000000000000 /your/local/file.dat > /mnt/nfs/drive/file.dat

Начнется копирование выходного файла на сетевой диск и его синхронизация. Когда ваша программа завершится, вы должны увидеть один и тот же файл размером 200 ГБ как в локальной, так и в сетевой файловой системе. Может сделать md5sum на обоих, чтобы проверить.

Некоторые разновидности unix могут также поддерживать запуск tail с - pid = {Ваш pid здесь} , который автоматически прекращает работу после завершения работы pid.

2
27.01.2020, 20:51

Теги

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