rsync :Как исключить несколько типов файлов?

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

taskset

как вы уже выяснили. Чтобы исключить ЦП, добавьте параметр загрузки

isolcpus=N

Число (N )основано на 0 -.

2
26.05.2021, 15:16
2 ответа

Во-первых, ваш первый пример работает -что не так с этим?

Если вы действительно не хотите этого делать, попробуйте --exclude=*.{jpg,mp4}, который будет (в некоторых оболочках )расширяться до --exclude=*.jpg --exclude=*.mp4, но обратите внимание:

  1. это функция оболочки , называемая расширение скобок . Это не функция rsync или правил фильтрации rsync.

    Это может легко привести к путанице и «неожиданному» поведению, если вы ошибочно полагаете, что rsync будет использовать фигурные скобки сам (он не будет, и не может, и даже никогда не увидит фигурные скобки ).

  2. Расширение выполняется до выполнения rsync. rsync видит только, например, --exclude=*.mp4, потому что в текущем каталоге нет имени файла, соответствующего этому шаблону.

  3. В том маловероятном случае, если есть какие-либо имена файлов, совпадающие с --exclude=*.mp4или --exclude=*.jpg, расширение скобок будет расширено до этих точных имен файлов без подстановочной карты -.

напр.

$ mkdir /tmp/test
$ cd /tmp/test
$ echo rsync --exclude=*.{jpg,mp4}
rsync --exclude=*.jpg --exclude=*.mp4

Пока все хорошо... но посмотрите, что происходит, когда есть имена файлов, которые на самом деле соответствуют раскрытию фигурных скобок:

$ touch -- --exclude=foo.jpg
$ touch -- --exclude=bar.mp4
$ touch -- --exclude=foobar.mp4
$ echo rsync --exclude=*.{jpg,mp4}
rsync --exclude=foo.jpg --exclude=bar.mp4 --exclude=foobar.mp4

Лучшим способом избежать ввода большого количества --excludeпараметров было бы использование массива и printf:

excludes=('*.mp4' '*.jpg')
rsync...args... $([ "${#excludes[@]}" -gt 0 ] && printf -- "--exclude='%s' " "${excludes[@]}")...more args...

Это приведет к командной строке вида:

rsync...args... --exclude='*.mp4' --exclude='*.jpg' ...more args...

Еще лучше было бы использовать подстановку массива и процесса для предоставления "файла" для --exclude-from. например.

rsync... --exclude-from=<([ "${#excludes[@]}" -gt 0 ] && printf -- '- %s\n' "${excludes[@]}")... 
4
28.07.2021, 11:29

--exclude={'*.jpg', '*.mp4'}не выполняет раскрытие фигурных скобок , потому что открывающая и закрывающая фигурные скобки находятся в отдельных словах. Расширение фигурной скобки строит несколько слов из одного слова с переменной частью. Уберите пробел.

rsync … --exclude={'*.jpg','*.mp4'} …

или

rsync … --exclude='*.'{jpg,mp4} …

=после --excludeнеобходимо, потому что результатом расширения оболочки должны быть два слова --exclude=*.jpgи --exclude=*.mp4. Без =расширение будет состоять из трех слов :--exclude, *.jpgи *.mp4.

1
28.07.2021, 11:29

Теги

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