Bash archiwizacja porownanie sprawdzenie czy plik istnieje

0

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 {}

0

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.

0

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

0

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".

1 użytkowników online, w tym zalogowanych: 0, gości: 1