Witam potrzebuje pomocy w skrypcie bash
1 skrypt ma archiwizować pliki modyfikowane w ciągu ostatnich x godzin, pobrać nazwę archiwum od użytkownika i sprawdzać czy sa kolejne takie pliki jak sa to archiwizować jak nie wyświetlić komunikat o braku
Zrobilem wiec
read plik
find /home/$nazwa -type -f -mtime 3 -exec tar -uvpf $plik.tar.gz {}
ale jest to jakby kawalek tego co powinno
chcialem wiec po podaniu pliku
sprawdzic czy plik istnieje
if [ -e /home/$nazwa/$plik ]
then
i tu jeżeli istnieje to jak prownac do wyszukanych plikoww?
else
find /home/$nazwa -type -f -mtime 3 -exec tar -uvpf $plik.tar.gz {}
find
wypisze tylko pliki, które istnieją - bo jak inaczej, ma wymyślać sobie nieistniejące nazwy? To if [ -e ]
jest niepotrzebne (chyba, że się obawiasz, że plik zniknie w te ćwierć sekundy między find
a resztą skryptu). Nie rozumiem - jakie listy plików chcesz porównywać?
Ogólnie wydaje mnie się, że możesz to rozwiązać albo jednym użyciem xargs:
find /home/$nazwa -type -f -mtime 3 | xargs tar -uvpf $plik.tar.gz
albo dorzucając pliki do archiwum, korzystając z flagi --append
:
find /home/$nazwa -type -f -mtime 3 -exec tar --append -uvpf $plik.tar.gz '{}' ';'
Na koniec - obowiązkowe upomnienie, by nazwy plików/ścieżki sklejać w cudzysłowach ("/home/$nazwa"
a nie /home/$nazwa
), bo jak dostaniesz zmienną ze spacją, to skrypt się wybuchnie.
chce archiwizowac katalog domowy
Zrobilem coś takiego
Pobieram nazwe
sprawdzam czy plik nazwa.tar.gz o podanej nazwie istnieje(jak juz skrypt byl uruchamiany) tym *if -e *
jeżeli istnieje robie
find /home/$nazwa -type -f -mtime 3 -exec tar -cvzf $temp.tar.gz '{}' ';'
i to mi działa ok
teraz ten plik temp chciałbym porownac z istniejacym archiwum w np za pomoca sum ! cmp /home/user/tmp.tar.gz /home/user/istniejace.tar.gz
i jeżeli się różnią podmieniam je ,a jeżeli się nie różnia daje jakis komunikat i usuwam tmp
tylko jak zrobic to porownanie w tym pierszym IF
Czyli wychodzi na to, że nie chcesz porównywać samych plików, a archiwa z plikami. Jak to zrobić to w sumie sam sobie odpowiedziałeś.
Lepszym rozwiązaniem mogłoby jednak być najpierw sprawdzić, czy archiwum istnieje, a jak tak, to użyć find -newer REFPLIK
- ten predykat pozwala wyszukać tylko pliki o dacie modyfikacji nowszej, niż modyfikacja REFPLIK
. Czyli - jak archiwum istnieje, wyszukujesz tylko pliki nowsze, niż samo archiwum, i dorzucasz; jak nie istnieje, tworzysz "od zera".