2012-03-19 15 views
35

Mam plik tekstowy, który zawiera listę plików i katalogów, które chcę skopiować (jeden na linii). Teraz chcę, aby rsync wziął to wejście z mojego pliku tekstowego i zsynchronizował go z docelowym, który zapewniam.odczytać dane wejściowe z pliku i odpowiednio zsynchronizować

Próbowałem gry z "--include-from=FILE" i "--file-from=FILE" opcjach rsync, ale po prostu nie działa

Próbowałem też wstępnie ustalające "+" na każdej linii w moim pliku, ale nadal nie działa.

Próbowałem przychodzić z różnymi WZORAMI filtru, jak opisano na stronie man rsync, ale nadal nie działa.

Czy ktoś może podać poprawną składnię tego przypadku użycia. Próbowałem powyżej rzeczy na Fedorze 15, RHEL 6.2 i Ubuntu 10.04 i żaden nie działał. Więc zdecydowanie brakuje mi czegoś.

Wielkie dzięki.

+1

Należy naprawdę tylko zamieścić swoje dokładnych poleceń, które zostały wypróbowane. – jdi

+3

Dobre pytanie, ale tak naprawdę nie jest związane z programowaniem - prawdopodobnie należy do Super User lub Server Fault, a nie do Stack Overflow. –

Odpowiedz

68

Istnieje więcej niż jeden sposób, aby odpowiedzieć na to pytanie w zależności od tego, jak chcesz skopiować te pliki. Jeśli zamiarem jest, aby skopiować listę plików ze ścieżek bezwzględnych, to może to wyglądać mniej więcej tak:

rsync -av --files-from=/path/to/files.txt//destination/path/

... To byłoby oczekiwać, aby być drogi w stosunku do lokalizacji źródłowej / i zachowałyby cała absolutna struktura pod tym miejscem docelowym.

Jeśli twoim celem jest, aby skopiować wszystkie z tych plików w liście do miejsca przeznaczenia, bez zachowania jakiejkolwiek hierarchii ścieżki (tylko zbiór plików), a następnie można wypróbować jedną z następujących czynności:

# note this method might break if your file it too long and 
# exceed the maximum arg limit 
rsync -av `cat /path/to/file` /destination/ 

# or get fancy with xargs to batch 200 of your items at a time 
# with multiple calls to rsync 
cat /path/to/file | xargs -n 200 -J % rsync -av % /destination/ 

Albo dla pętli i skopiować:

# bash shell 
for f in `cat /path/to/files.txt`; do cp $f /dest/; done 
+0

jdi, dzięki za informację. Będę trzymał go przy sobie na przyszłość. – slayedbylucifer

+0

Jednak używam rsync dla mojego przypadku użycia. – slayedbylucifer

+0

Mówisz, że to nie odpowiedział na twoje pytanie? – jdi

4

Biorąc plik wystawianie $ HOME/GET/bringemback zawierający

**need/A 
alsoneed/B 
shouldget/C** 

cd $ HOME/GET

run

rsync -av --files-from=./bringemback [email protected]:. $HOME/GET/collect 

by pobrać pliki i upuść je w $HOME/GET/collect

$HOME/GET/ 
      collect/ 
        need/A 
        alsoneed/B 
        shouldget/C 

lub tak wierzę.

pomocny

+3

Po prostu korekta opcja powinna być '' '--files-from =' '', a nie '' --- --- from-files'''. Więc poprawiony przykład: '' 'rsync -av --files-from =./Bringemback me @ theremote :. $ HOME/GET/collect''' – jeffchan

2

rsync obsługuje tego natywnie:

rsync --recursive -av --files-from=/path/to/files.txt//destination/path/

Powiązane problemy