Копирование сотен тысяч файлов из удаленного каталога в другой удаленный каталог

Согласно лучшим практикам вы не должны хранить пароли в виде открытого текста на диске или в памяти. Переменные среды также проблематичны. Представьте, что производственная система запускает программу мониторинга, которая периодически выполняет «ps auxwwe» и записывает вывод в файл журнала. Ваши учетные данные sqlplus будут случайно записаны в журналы монитора, которые могут быть доступны для чтения всем. Чаще всего журналы отправляются в Splunk / ElasticSearch / Hadoop / Loggly.

Я написал программу, которая безопасно передает учетные данные через файловые потоки здесь: https://github.com/ryanchapman/safe_sqlplus

После отправки учетных данных в программу sqlplus safe_sqlplus обнуляет часть памяти где они хранились.

2
08.02.2019, 15:07
3 ответа

Возможно, вы можете использовать findв сочетании с cpio, чтобы создать поток из множества ваших файлов на одном компьютере и извлечь файлы с помощью cpioна другом компьютере.

ssh user@source "cd sourcedir && find./ -xdev -name 'A*random*' -print | cpio -o -Bav -H crc" | ssh user@target "cd destinationdir && cpio -i -vumd"

Это (непроверенное )решение основано наhttps://www.netroby.com/view/3602. Там вы найдете некоторое объяснение аргументов для findи cpio.

1
27.01.2020, 22:28
  1. заархивируйте, заархивируйте или сожмите все содержимое папки в один source.tarфайл; можно быстро сделать через tar -cf /sourcedirectory; однако он будет большим и будет содержать все 100 000+ файлов в одном файле.
  2. перенесите этот файл как хотите
  3. один раз в месте назначения, tar -xf source.tarили соответствующим образом распакуйте/разархивируйте обратно в исходную структуру папок, содержащую более 100 000 файлов.
0
27.01.2020, 22:28

Попробуйтеlocate

Кажется, findслишком медленный для этого приложения.

  • Существует более быстрый инструмент для поиска файлов,locate. Он использует базу данных, которую необходимо обновить для locate, чтобы найти самые новые файлы.

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

    Этот процесс обновления очень быстрый по сравнению с find, и при обновлении базы данных locateнайдет все файлы (и намного быстрее, чемfind).

Использование

  • Создать и в следующий раз обновить базу данных

    sudo updatedb
    
  • Найдите соответствующие файлы.locateпредоставляет несколько полезных опций, но не так много опций, как find. Возможно, вы сможете разработать полезный шаблон для своих целей.

    Я предлагаю две командные строки, которые вы можете изменить, а затем объединить с scpили rsync.

    Вы можете ограничить количество файлов с помощью--limit

    Если вы ищете только в /path/from/, а не в подкаталогах -

    locate --regex --limit 1000 '/path/from/A.*random.*'
    

    Если искать не в самом /path/from/, а в его подкаталогах -

    locate --regex --limit 1000 '/path/from/.*/A.*random.*'
    

    Подробнее см. man locate.

Общие комментарии

  • Возможно, вам следует изменить способ записи и хранения этих файлов, например, с несколькими подкаталогами -, чтобы в каждом каталоге не было слишком много файлов, например один подкаталог -для каждой даты (2019-02-12. ], 2019-02-13... ),

    или даже лучше, как многие менеджеры фотографий хранят файлы изображений,

    • один уровень подкаталогов для каждого года
    • следующий уровень подкаталогов для каждого месяца года
    • окончательный уровень подкаталогов для каждого дня месяца, где хранятся файлы.
  • Возможно, вы также можете удалить некоторые файлы (, например, когда они становятся слишком старыми ).

0
27.01.2020, 22:28

Теги

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