Nowe posty

Autor Wątek: Porównanie 3 katalogów i wypisanie różnic  (Przeczytany 3734 razy)

fulbi

  • Gość
Porównanie 3 katalogów i wypisanie różnic
« dnia: 2012-08-01, 12:45:19 »
Witam!

Jest to mój pierwszy post na forum dlatego proszę o wyrozumiałość.

Mam problem ze zbudowaniem skryptu w bash-u, który porównuje 3 katalogi w których są różne pliki. Skrypt miałby za zadanie przeskanować (zrobić listę plików) i porównać je między sobą oraz wypisać co doszło, co zostało usuniętę. Próbowałem z kodem:
#!/bin/bash 

if [ $# -ne 2 ]; then
    printf "\\n Jako argumenty musisz podać 2 różne katalogi\\n Podałeś $#.\\n"
    exit 1
fi

ls -l $1
ls -l $2

por1=`diff -q $1 $2 | grep $2 | sort`
echo W katalogu $1 nie ma: $por1

por2=`diff -q $1 $2 | grep $1 | sort`
echo W katalogu $2 nie ma: $por2
program wykonuje tylko wypisanie dwa razy listy a na polecenie z 2 wiersza wypisuje "[0: nie znaleziono polecenia.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3070
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Porównanie 3 katalogów i wypisanie różnic
« Odpowiedź #1 dnia: 2012-08-01, 13:00:59 »
Popatrz jaka jest różnica między
if [ $# -ne 2 ]; then
a
if [$# -ne 2 ]; then
Jeden działa, jeden nie. Który i dlaczego? Prawdopodobnie w przykładzie powyżej masz co innego niż w tym, co uruchamiasz w domu.

Dodatkowo dawaj kody źródłowe w znaczniki code (poprawiłem Twój post).
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

fulbi

  • Gość
Porównanie 3 katalogów i wypisanie różnic
« Odpowiedź #2 dnia: 2012-08-01, 13:43:19 »
Ok, już poprawiłem składnie i skrypt zadziałał, ale nie tak jakbym chciał. Po wpisaniu wywoałania "bash sk.sh Katalog1 Katalog2" Wyskakuje mi:
 
sk.sh: command not found
razem 0
-rw-r--r-- 1 ubuntu ubuntu 0 2012-08-01 11:05 1
-rw-r--r-- 1 ubuntu ubuntu 0 2012-08-01 11:05 2
-rw-r--r-- 1 ubuntu ubuntu 0 2012-08-01 11:05 3
-rw-r--r-- 1 ubuntu ubuntu 0 2012-08-01 11:05 4
razem 0
-rw-r--r-- 1 ubuntu ubuntu 0 2012-08-01 11:05 1
-rw-r--r-- 1 ubuntu ubuntu 0 2012-08-01 11:05 2
-rw-r--r-- 1 ubuntu ubuntu 0 2012-08-01 11:05 3
W katalogu Katalog1 nie ma: diff -q $1 $2 | grep $2 | sort
W katalogu Katalog2 nie ma: diff -q $1 $2 | grep $1 | sort
find: ścieżki muszą poprzedzać wyrażenie: -
Składnia: find [-H] [-L] [-P] [-0poziom] [-D help|tree|search|stat|rates|opt|exe
c] [ścieżka...] [wyrażenie]
Wykonałem na próbe 2 katalogi w których jest 4 i 3 pliki tekstowe.

fulbi

  • Gość
Porównanie 3 katalogów i wypisanie różnic
« Odpowiedź #3 dnia: 2012-08-02, 07:13:46 »
Wpadłem wczoraj na pomysł, czy nie lepiej by było wypisać listy wszystkich plików w katalogu do pliku. W każdym pliku po jednej liście. I porównać je za pomocą diff3? Było by to możliwe?

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3070
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Porównanie 3 katalogów i wypisanie różnic
« Odpowiedź #4 dnia: 2012-08-02, 08:17:26 »
To jeszcze poszukaj w dokumentacji BASHa o różnicach między ' " i `
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

fulbi

  • Gość
Porównanie 3 katalogów i wypisanie różnic
« Odpowiedź #5 dnia: 2012-08-06, 11:48:59 »
Oto gotwy kod skryptu:
#!/bin/bash
cd Katalog1
ls > lista1
cd ..
cd Katalog2
ls > lista2
cd ..
cd Katalog3
ls > lista3
cd ..
diff3 Katalog1/lista1 Katalog2/lista2 Katalog3/lista3
Wszystko się ładnie porównuje i wyświetla różnice. Miałbym pytanie czy byłaby możliwość dodania do tych wyników, nie tylko nazwy pliku, ale i daty utworzenia?

  • Gość
Porównanie 3 katalogów i wypisanie różnic
« Odpowiedź #6 dnia: 2012-08-06, 13:24:20 »
Twoja odpowiedź to :
 #man ls
Wklikujesz i szukasz.

Może zawierać nawet datę utworzenia, właściciela i uprawnienia.

 
$ ls -l --sort=t
lub
ls -lat # najpierw najwcześniejsze

ls -latr # najpierw najstarsze
Z tym, że te dwa ostatnie polecenia uwzględniają WSZYSTKO co masz w katalogu czyli ukryte i nieukryte