Obecnie używam rsync
w skrypcie, który wdraża aplikację PHP ze środowiska testowego na serwer produkcyjny. Oto jak:
rsync -rzai --progress --stats --ignore-times --checksum /tmp/app_export/ root@app.com:/var/www/html/app/
To powoduje obecnie wyświetlenie listy każdego porównywanego pliku (każdego pliku w projekcie), ale chciałbym, aby wyświetlał tylko te zmodyfikowane, więc mogę uruchomić go z --dry-run
opcją sprawdzenia, czy każde wdrożenie aktualizuje tylko pożądane pliki.
UWAGA: Do tej pory najlepsze, co mogłem zrobić, to grep fcst
wyniki, ale szukam rsync
opcji, która na pewno tam jest, ale nie mogę jej znaleźć na stronach podręcznika.
Z góry dziękuję!
-P
postęp robi dokładnie to w-n
ustawieniu dryrun, chociaż też-i
nie jest źle. Zobacz moją odpowiedź poniżej.Użyj
--out-format
opcjiWedług strony podręcznika:
Jeśli potrzebujesz tylko rzeczywistych nazw plików (
--out-format="%n"
), polecenie suchego uruchamiania może wyglądać następująco:rsync -rzan --out-format="%n" --ignore-times --checksum /tmp/app_export/ [email protected]:/var/www/html/app/
Kiedy rsync jest wywoływany za pomocą
-v
, wewnętrznie korzysta z tej opcji w domyślnym formacie"%n%L"
, który podaje tylko nazwę pliku, a jeśli element jest linkiem, to wskazuje.Ale obejmuje to również krótkie podsumowanie na początku i na końcu procesu synchronizacji.
Aby pozbyć się tego podsumowania, użyj
--out-format
opcji bezpośrednio.Btw.
-i
również używa wewnętrznie--out-format
, ale w formacie"%i %n%L"
.źródło
Począwszy od rsync v3.1.0, wydanego w 2013 r., Dostępna jest
--info
flaga, która umożliwia precyzyjną kontrolę nad danymi wyjściowymi.Dostępne
--info
flagi to:źródło
Nie jestem pewien, czy różni się to między używanymi wersjami / opcjami, ale w wersji mys, kiedy używam
-i
opcji, otrzymuję listę:Więc proste rozwiązanie, aby uzyskać tylko listę plików faktycznie przesłanych, wystarczy uruchomić:
To po prostu ukryje wszystkie linie zawierające
f..T......
. Tak skutecznie ukryje to identyczne pliki.źródło
W rzeczywistości odpowiedziałeś na własne pytanie, ponieważ twoje pierwotne polecenie już je ma:
--progress
Jest to poprawna opcja, chociaż strona podręcznika jest nieco tajemnicza:
To ma sens, ponieważ wywołujesz swój
rsync
ciąg znaków w trybie dryrun, nie dzieje się nic innego, ale nadal masz postęp: mianowicie pliki, które się zmieniły i zostałyby przeniesione.W ten sposób otrzymujesz schludną małą listę wszystkich plików, na przykład:
Miejsce docelowe ma już kopię pliku zmienionego, który został zaktualizowany w źródłowym i starym pliku, który pozostaje niezmieniony. Źródło ma również dodatkowy plik: newfile.
Jeśli następnie wywołamy twoją komendę rsync, ale usuń
-i
wyszczególnienie i po prostu dodaj dryrun-n
Otrzymasz listę tylko plików, które rsync przetransferowałby: zmieniono plik i nowy plik.
źródło