То, что Вы предложили, должно на самом деле работать:
rsync -rzvvhP remotehost:/home/tmp/1\* /home/tmp/
(Можно сойти с рук не заключение в кавычки *
при большинстве обстоятельств, как шаблон remotehost:/home/tmp/1\*
вряд ли будет соответствовать любому файлу, таким образом, он будет оставлен наедине с большинством установок оболочки.)
Ваша попытка с --exclude='*'
отказавший, потому что первое соответствие применяется, и Ваше первое соответствие для всего (*
) говорит для исключения.
См. это руководство для некоторых общих принципов о фильтрах rsync. Здесь, для включения только начала каталогов 1
на верхнем уровне и копии все во включенных подкаталогах, включают /1
затем исключите /*
.
rsync -rzvvhP --include='/1' --exclude='/*' remotehost:/home/tmp/ /home/tmp/
Я подозреваю это wc
будет использовать меньше процессорного времени, оно записано в C и тщательно оптимизировалось со временем. Однако нет никакой причины не протестировать это самостоятельно. time
позволит Вам сравнить производительность своего сценария жемчуга против wc
. Используя time
команда, Вы должны быть произведены как:
> time wc /usr/share/dict/words
119095 119095 1145922 /usr/share/dict/words
wc /usr/share/dict/words 0.03s user 0.00s system 98% cpu 0.030 total
В этом случае, wc
используемый 0,030 секунды процессорного времени всего.
Обычно имеет место, что при попытке решить проблему, которая может полностью инкапсулироваться единственным инструментом командной строки такой как wc
, то, что они более производительны, чем что-либо еще.
Это только, когда необходимо начать объединять несколько "команд" в цепочку, вместе делает имеет смысл переходить решение от объединения в цепочку их вместе, к решению проблемы на высокоуровневом языке, таком как Perl, Python или Ruby.
Расход в объединении в цепочку команд вместе обычно поступает в форме необходимости повторяющимся образом продолжать выполнять простые инструменты много раз.
Я соглашаюсь с @wingedsubmariner, wc
почти наверняка будет быстрее, чем какая-либо версия жемчуга, которую Вы готовите:
$ /usr/bin/time -f "%Uuser %Ssystem %Eelapsed %PCPU" wc /usr/share/dict/words
99171 99171 938848 /usr/share/dict/words
0.02user 0.00system 0:00.02elapsed 86%CPU
$ /usr/bin/time -f "%Uuser %Ssystem %Eelapsed %PCPU" \
perl -ane '$k+=$#F+1; END{print "$k\n"}' /usr/share/dict/words
99171
0.09user 0.00system 0:00.09elapsed 96%CPU