Как передать CTRL-D командной строке в рамках сценария?

Когда Вы отправляете тот же набор файлов, rsync лучше подходит, потому что это только отправит различия. tar будет всегда отправлять все, и это - трата ресурсов, когда много данных уже там. tar + rsync + untar теряет это преимущество в этом случае, а также преимущество хранения папок в синхронизации с rsync --delete.

Если Вы копируете файлы впервые, сначала делание пакет, то, отправляя, то распаковка (AFAIK rsync не берет переданный по каналу, вводят), является громоздким и всегда хуже, чем просто rsyncing, потому что rsync не должен будет делать никакой задачи больше, чем tar так или иначе.

Подсказка: версия 3 rsync или позже делает возрастающую рекурсию, означая, что она начинает копировать почти сразу, прежде чем она будет считать все файлы.

Tip2: Если Вы используете rsync ssh, можно также использовать также tar+ssh

tar -C /src/dir -jcf - ./ | ssh user@server 'tar -C /dest/dir -jxf -'

или просто scp

scp -Cr srcdir user@server:destdir

Общее правило, сохраните это простым.

ОБНОВЛЕНИЕ:

Я создал 59M демонстрационные данные

mkdir tmp; cd tmp
for i in {1..5000}; do dd if=/dev/urandom of=file$i count=1 bs=10k; done

и тестируемый несколько раз передача файлов к удаленному серверу (не в той же LAN), с помощью обоих методов

time rsync -r  tmp server:tmp2

real    0m11.520s
user    0m0.940s
sys     0m0.472s

time (tar cf demo.tar tmp; rsync demo.tar server: ; ssh server 'tar xf demo.tar; rm demo.tar'; rm demo.tar)

real    0m15.026s
user    0m0.944s
sys     0m0.700s

при разделении журналов от ssh отправленных пакетов трафика

wc -l rsync.log rsync+tar.log 
   36730 rsync.log
   37962 rsync+tar.log
   74692 total

В этом случае я не вижу преимущества в меньшем сетевом трафике при помощи rsync+tar, который ожидается, когда значение по умолчанию mtu будет 1500 и в то время как файлы являются 10k размером. rsync+tar имел больше генерируемого трафика, был медленнее в течение 2-3 секунд и оставил два файла мусора, которые должны были быть очищены.

Я сделал те же тесты на двух машинах на той же LAN, и там rsync+tar сделал намного лучшие времена и много намного меньше сетевого трафика. Я принимаю причину крупных кадров.

Возможно, rsync+tar был бы лучше, чем просто rsync на намного большем наборе данных. Но откровенно я не думаю, что это стоит проблемы, Вам нужен двойной интервал в каждой стороне для упаковки и распаковки, и существует несколько других опций, как я уже упомянул выше.

7
10.01.2013, 14:07
4 ответа
  • Uuencode: кодируйте программой uuencode имя <исходный файл

  • возможно, просто нужна заключительная пустая строка: добавить ; echo -e "\n\n" ; перед закрывающей скобкой, и попробовали еще раз? -

Таким образом в Вашем случае:

( cat bodyText.txt; uuencode backup.tar < backup.tar ; echo -e "\n\n" ; ) | mail -s "backup" myEmail@myserver.com

Иначе использует mutt который обрабатывает вложения лучше и знает о типах пантомимы и т.д.:

mutt -s "the subject" -a backup.tar -- myEmail@myserver.com < bodyText.txt
4
27.01.2020, 20:19
  • 1
    эхо является, вероятно, ненужной... Я не могу попробовать его здесь, так попробуйте им и попробуйте без него и посмотрите который ^^ –  Olivier Dulac 10.01.2013, 14:36
  • 2
    работ, не работающий на меня. Та же проблема. –  SpaceDog 10.01.2013, 14:49
  • 3
    : uuencode backup.tar backup.tar для части –  Olivier Dulac 10.01.2013, 15:23
  • 4
    Uuencode у Вас может быть псевдоним? на Вашем комментарии @goodluck отвечают ниже, выглядит, как будто Ваша "Uuencode что-то" действительно кодирует программой uuencode файл "что-то"? посмотрите type -all uuencode в ударе и если это - псевдоним, попробовать \uuencode backup.tar backup.tar (с "\" для обхода псевдонима) –  Olivier Dulac 10.01.2013, 15:25
  • 5
    , я обновил свой ответ: попробуйте новый синтаксис. И попробуйте mutt альтернатива также. Право –  Olivier Dulac 10.01.2013, 15:34

Как другие сказали, Управление-D состоит в том, как Вы говорите оболочке отправлять конец файла. Процессы, читающие из потоков, должны получить конец файла, когда поток закрывается.

Но кажется, что Вы пытаетесь реализовать что-то, что уже существует в большем, заполняют форму. У Вас могли быть причины того, конечно, но если Вы интересуетесь существующими решениями, mpack/munpack являются программами командной строки, что пантомима кодирует файлы и отправляет через почту. Можно прочитать страницу справочника, чтобы видеть, делает ли она то, что Вы хотите.

0
27.01.2020, 20:19

Сделайте Вы имеете в виду:

uuencode backup.tar < bodyText.txt | mail -s "backup" myEmail@myserver.com
-1
27.01.2020, 20:19
  • 1
    , не работающий на меня. Вложение прибывает без основного текста.... –  SpaceDog 10.01.2013, 14:52
  • 2
    Ваш код к uuencode не имеет никакого смысла и изменения, с которым часть не помогла бы с проблемой mail в любом случае. Необходимо записать ответы, которые объясняют проблему, не только выводят строку кода: это было бы более полезно для читателей и поможет Вам выяснить, имеет ли то, что Вы предлагаете, шанс решения проблемы. попытка –  Gilles 'SO- stop being evil' 10.01.2013, 15:20

Используйте подробный режим (-v), чтобы избежать ctrl+d

echo -e 'Mail body'| mail -v -s 'Mail Subject' my@email.com
-1
27.01.2020, 20:19

Теги

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