Jak mogę domyślnie wykluczyć pliki za pomocą rsync?

12

Jak mogę domyślnie wykluczyć pliki za pomocą rsync? Oto jak zaczyna się moja normalna składnia rsync:

rsync --exclude ".ht*" --exclude "error_log" --exclude ".DS*" --exclude "old" ...

Widziałem wiele wzmianek o konfigurowaniu /etc/rsyncd.confpliku, ale może to więcej dla demona niż komendy rsync.

Czy jest możliwe, aby niektóre domyślne wykluczenia dla rsync były wywoływane z wiersza poleceń, jak w mojej domyślnej składni powyżej?

cwd
źródło

Odpowiedzi:

10

Dodaj swoje wykluczenia do pliku, a następnie użyj --exclude-from = / path / to / exclude_file

na przykład

# cat rsync.excludes
.ht*
error_log
.DS*
old
...

# rsync --exclude-from=rsync.excludes
frogstarr78
źródło
1
wygląda na to, że składnia jest, ale --exclude-fromnie, --exclude-fileale w przeciwnym razie wydaje się, że to bilet. dzięki!
cwd
5

Nie, rsyncnie ma domyślnego pliku konfiguracyjnego, który będzie czytany po wywołaniu. Najlepsze, co możesz zrobić, to to, co mówi @ frogstarr78 i utwórz plik tekstowy ze wzorami, nazwami plików i katalogów do wykluczenia, a następnie wskaż rsyncgo --exclude-from=filename.

Kusalananda
źródło
2
rsync does not have a default configuration file- to rozczarowujące
cwd 29.09.11
3

Chociaż rsync nie pozwala ustawić domyślnych opcji, możesz utworzyć skrypt otoki i umieścić go wyżej w $ PATH niż w pliku binarnym rsync.

To jest moje opakowanie rsync, w którym mieszka ~/bin/rsync

#!/bin/sh

# Set path to the rsync binary
RSYNC=/usr/bin/rsync

# Look for these exclude files
IGNORE_FILES=(~/.rsyncignore ./.gitignore ./.rsyncignore)

EXCLUDE_FROM=""
for f in ${IGNORE_FILES[@]}; do
  if [[ -e $f ]]; then
    EXCLUDE_FROM="$EXCLUDE_FROM --exclude-from=$f "
  fi
done
$RSYNC $EXCLUDE_FROM "$@"

Będzie szukać ~/.rsyncignore, ./.gitignore, ./.rsyncignoreplików, a jeśli któryś z nich istnieje, wykorzystywać je jako domyślne --exclude-fromargumenty.

Wystarczy zmienić RSYNC i IGNORE_FILES, aby dostosować je do swojego środowiska i preferencji.

scottatron
źródło
0

--exclude „/ *” domyślnie wyklucza wszystko. Oto przykład:

rsync -av --include "bin /" --exclude "/ *" / source_dir / / dest_dir /
Xinbin Dai
źródło