bash - porównywanie katalogów

Potrzebujesz pomocy z C, C++, perl, python, itp.
Kernel1
Posty: 3
Rejestracja: 07 listopada 2007, 18:16

bash - porównywanie katalogów

Post autor: Kernel1 »

Treść programu:
Porównanie zawartości dwóch zadanych katalogów (argumenty skryptu). Przy porównaniu należy ignorować podkatalogi. W wyniku wyświetlić na ekranie listę plików identycznych w obu katalogach.

Program w chwili obecnej jest tak napisany:

W katalogu 1 mam 2 pliki o nazwie 'plik' oraz 'plik1' w 2 katalogu mam pliki o nazwie 'plik' i 'plik3'.

vi skrypt.sh

Kod: Zaznacz cały

#!/bin/bash
[ -d $1 -a -d $2 ] || { echo 'podaj w argumentach 2 katalogi' >&2; exit; }
ls $1 /root/katalog1/
ls $2 /root/katalog2/
diff /root/katalog1/ /root/katalog2/
Po wpisaniu polecenia "bash skrypt.sh"
Wyswietla mi liste katalogów w 1 i 2 katalogu, oraz listę plików innych w katalogu /root/katalog1 oraz /root/katalog2

Chce aby skrypt mozna bylo uruchamiac z "argumentem skryptu" czyli nie wiecej chodzi mi o cos takiego po wpisaniu 'bash skrypt.sh katalog1' i wyswietla liste plikow w katalogu 1 oraz 2.

Druga rzecz to nie wiem jak zrobic w 5 linii opcje diff z parametrem (-x) aby ignorował podkatalogi, bo o to chodzi w zadaniu.

No i trzy, żeby wyswietlał na ekranie listę plików identycznych w obu katalogach, czyli w moim przypadku plik o nazwie 'plik' ktory znajduje sie w obu katalogach.

Proszę o pomoc w dokończeniu programu.

Pozdrawiam i z góry dziękuje.

//edit
uzywaj tagów code
mlyczek
Gość

Post autor: Gość »

Może takie coś na początek (?) :

Kod: Zaznacz cały

#!/bin/bash 

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


lista=$(diff -s "$1" "$2" | grep ident | sed 's/.*\///;s/\ .*//')

if [ -z "$lista" ]; then
	printf "\n Brak identycznych plików w podanych katalogach\n"
else
	printf "\n--- Pliki identyczne ---\n" 
	printf "\n$lista\n"
	printf "\n------- Koniec -------\n" 
fi

exit $?
Tylko weź pod uwagę, że to porównuje pliki, a nie tylko ich nazwy.
Mam nadzieję, że o to chodziło.


Pozdrawiam
Kernel1
Posty: 3
Rejestracja: 07 listopada 2007, 18:16

Post autor: Kernel1 »

Hagal, tak może porównywać także pliki ,,od środka'', a nie tylko ich nazwy.

P.S. Program uruchamia się poleceniem:

Kod: Zaznacz cały

bash skrypt.sh
i całość działa?
Bo nie mam obecnie teraz w akademiku możliwości sprawdzenia tego programu, bo nie jestem na swoim komputerze, dopiero będę mógł to uczynić w piątek.

Dziękuje Hagal za włożony wysiłek i pomoc dla mnie.
Poza tym macie wiele ciekawych rzeczy na forum Debiana, z chęcią będę przeglądał je.

Pozdrawiam.
Gość

Post autor: Gość »

Kernel1 pisze:Program uruchamia się poleceniem 'bash skrypt.sh' i całość działa?
Wystarczy samo:

Kod: Zaznacz cały

/ścieżka/do/skrypt.sh
Wymóg użycia basha jest wpisany w pierwszej linii.

Przy czym, samo: /ścieżka/do/skrypt.sh lub podanie innej liczby argumentów niż 2 da Ci w wyniku:

Kod: Zaznacz cały

 Jako argumenty musisz podać 2 różne katalogi
 Podałeś 0.
Żeby porównać należy wpisać:

Kod: Zaznacz cały

/ścieżka/do/skrypt.sh /ścieżka_do/1_katalog /ścieżka_do/2_katalog
Sam przecież prosiłeś o:
Porównanie zawartości dwóch zadanych katalogów (argumenty skryptu). Przy porównaniu należy ignorować podkatalogi. W wyniku wyświetlić na ekranie listę plików identycznych w obu katalogach.
Pozdrawiam.
Kernel1
Posty: 3
Rejestracja: 07 listopada 2007, 18:16

Post autor: Kernel1 »

No faktycznie sam o tym wspomniałem ;) To przez te zajęcia do wieczora i ciągły stres.

Dziękuje za pomoc.
Miłej nocy.

Pozdrawiam
ODPOWIEDZ