Kopiowanie pliku tylko wtedy, gdy jest nowszy niż miejsce docelowe

36

Jak skopiować plik w systemie Linux tylko wtedy, gdy kopiowany plik jest nowszy niż wersja docelowa?

Jeśli plik w miejscu docelowym jest nowszy, chcę, aby kopia pliku nie była kontynuowana.

Eli
źródło

Odpowiedzi:

17

Użyj rsync

rsync --progress -r -u /from/one/* /to/another/directory
zgryz
źródło
3
Dla kompletności: -roznacza operację rekurencyjną w podkatalogach i -uutrzymywanie nowszych plików w miejscu docelowym (= aktualizacja). --progresspokazuje informacje o postępie podczas pracy.
Jörg Gottschlich
6

Nie mówisz, jakiej powłoki używasz, więc założę ksh:

if [[ file1 -nt file2 ]]; then cp file1 file2; fi
Kusalananda
źródło
Czy bash nie jest najczęstszy?
Rob
1
@Rob, tak. Oczywiście działa to również w bashu. Po prostu nie miałem pod ręką bash (ani żadnego standardowego Linux-a), kiedy to napisałem.
Kusalananda
4

yes|cp -ruv /from/* /to/.
tak - odpowiedz tak na wszystkie pytania.
r - Rekurencyjny
u - aktualizacja
v - Postęp

działa jak xargs .

Nie wiem jak wyjaśnić naukowo.

Jak zmusić CP do zastąpienia bez potwierdzenia

Felippe Silvestre
źródło
1
To jest trochę tajemnicze. Czy możesz rozszerzyć swoją odpowiedź, aby była bardziej jednoznaczna, może zawierać przykład? Dzięki. z recenzji
fixer1234,
tak -> Odpowiedz tak na wszystkie pytania.
Felippe Silvestre