|
[bash] Porównywanie katalogów
Kernel1 - 07-11-2007 18:20
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
#!/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
- 07-11-2007 20:00
Może takie coś na początek (?) : #!/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 - 07-11-2007 22:15
Hagal, tak może porównywać także pliki ,,od środka'', a nie tylko ich nazwy.
P.S. Program uruchamia się poleceniem:
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.
- 07-11-2007 22:43
Program uruchamia się poleceniem 'bash skrypt.sh' i całość działa?
Wystarczy samo: /ś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: Jako argumenty musisz podać 2 różne katalogi Podałeś 0.
Żeby porównać należy wpisać: /ścieżka/do/skrypt.sh /ścieżka_do/1_katalog /ścieżka_do/2_katalog
Sam przecież prosiłeś o: Pozdrawiam.
Kernel1 - 07-11-2007 22:46
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
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|