Tworzę prosty skrypt, który kopiuje wszystkie pliki z DIRECTORYA, które nie istnieją w DIRECTORYB. Robię to za pomocą polecenia cp:
cp -u DIRECTORYA/* DIRECTORYB
Chciałbym również wysłać wiadomość e-mail do administratora, który wyświetli listę skopiowanych plików.
Idealnie więc, zanim uruchomię powyższe polecenie, chciałbym pobrać pliki, które zostaną skopiowane i przechowywać je w zmiennej do późniejszego wykorzystania podczas tworzenia mojej wiadomości e-mail.
Czy ktoś może skierować mnie we właściwym kierunku? Sprawdziłem użycie grep, ale nie sądzę, że można to zrobić za pomocą polecenia cp?
-v
flagi, aby wydrukować nazwy plików podczas ich kopiowania? Przekieruj to do pliku lub bezpośrednio w zmiennej i użyj go do zbudowania wiadomości.cp
polecenie ma opcję--attributes-only
pozwalającą nie kopiować danych plików, a jedynie strukturę katalogów i plików.variable=$(cp -v ...)
przechwytuje stdout cp. Zobacz gnu.org/software/bash/manual/html_node/Command-Substitution.htmOdpowiedzi:
Nie sądzę, że GNU
cp
ma ci coś do pomocy, jeśli chcesz zobaczyć, co by zrobił bez działania. Jeśli chcesz zalogować zmodyfikowane pliki, możesz użyć-v
opcji:Zamiast tego
cp
możesz użyć programu rsync , który jest o wiele potężniejszy i instalowany prawie wszędzie, z wyjątkiem systemów wbudowanych niskiej klasy (i łatwy do zainstalowania tam, gdzie domyślnie nie jest obecny).lub
źródło
Według strony podręcznika ,
jest to funkcja, która łączy dwa testy, jeden trywialny do zaimplementowania w skrypcie ( brak ) i drugi wymagający pracy ( nowszy ). Możesz utworzyć skrypt, który zgłasza, co jest potrzebne
comm
,diff
itest
.Żaden ze standardowych
cp
narzędzi zapewniają możliwość sucho operacji kopiowania. Jak sugerowano,rsync
jest to sposób na wykonanie tego za pomocą powszechnie dostępnego narzędzia. Oczywiściersync
zwykle służy do kopiowania na podstawie większej liczby kryteriów niż tylko nowszych lub brakujących (stosuje się również rozmiar pliku i znaczniki czasu). Ale można to sprowadzić do robienia sprawiedliwegocp -u
.W przypadku niestandardowych narzędzi istnieje
copy
narzędzie, które napisałem (i oczywiście nadal używam) pod koniec lat osiemdziesiątych. Prawdopodobnie został zainspirowanymake
narzędziem, ponieważ pierwszą opcją, którą dodałem, było-n
.W podanym przykładzie byłby on użyty w następujący sposób:
Dalsza lektura:
copy - narzędzie do kopiowania plików / katalogów
wpis dziennika zmian od sierpnia 1988 r . :
źródło
Jeśli chcesz uruchomić
cp foo*bar whatever
, uruchomecho foo*bar whatever
zamiast tego.źródło
cp -u
i szuka opcji podobnej do cp.Możesz użyć polecenia diff. Mam zadanie, które codziennie kopiuje niektóre pliki kopii zapasowych. kiedyś muszę sprawdzić, czy wszystkie pliki są skopiowane, oto składnia:
i oczywiście, jeśli chcesz je skopiować, użyj:
źródło
Zamiast tego rozważ użycie rsync. Rsync działa doskonale na lokalnych kopiach i na pewno może robić, co chcesz, gdy przejdziesz przez piętnaście dostępnych opcji gazillionu.
pokaże ci wszystko, co można zrobić, i
zrobię to.
źródło