Nowe posty

xx Dystrybucja pod HP Omen (6)
Wczoraj o 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
Wczoraj o 21:08:23
lamp Problem z Linux Lite po instalacji (0)
Wczoraj o 19:50:30
xx Ile pingwinów? (1)
Wczoraj o 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: kopiowanie plików  (Przeczytany 13776 razy)

stiuart

  • Gość
kopiowanie plików
« dnia: 2007-10-02, 23:54:05 »
witam mam problem z pewnym skryptem
skrypt ma kopiowac plik z jednego katalogu do  innego katalogu a jesli katalog jest pusty to ma wyskoczyc komunikat mam cos takiego


 #!/bin/bash
       cp rR katalog1 katalog2
       
        if[[-e katalog1/*.*]]
        then echo "katalog jest pusty"
        else  echo " skopiowano pliki"
        fi

prosze o komentarze

de_laurent

  • Gość
kopiowanie plików
« Odpowiedź #1 dnia: 2007-10-03, 01:30:02 »
Czesc.

Wybacz, ze tak na wstepie, ale straszny z ciebie niechluj.
Przegladnij swoj skrypt jeszcze raz, potem kontynuuj czytanie.

Nie wiem skad wziales tylde ~ w poleceniu cp, byc moze to literowka.
Zobacz: man cp.
W linii z komenda cp masz catalog1, a w linii z komenda if katalog1!

Nastepnie po nawiasie [ w poleceniu if _musi_ byc spacja, tak samo przed nawiasem ].

Cala linie z if zamienilbym na:
if [[ `ls katalog1` != "" ]];then
  echo ...
else
  echo ...
fi

`ls katalog1` - wykonuje komende ls katalog1 i w swoje miejsce podstawia wynik...
Poza tym najpierw sprawdzalbym czy sa jakies pliki do skopiowania, a potem ew. kopiowal...

Nastepnym razem sprawdz czy nie masz jakichs kulfonow zanim dasz cos innym do sprawdzenia.

Pozdrowienia

Offline

  • Users
  • Guru
  • *****
  • Wiadomości: 825
    • Zobacz profil
kopiowanie plików
« Odpowiedź #2 dnia: 2007-10-03, 10:09:26 »
Eleganckie sprawdzanie czy katalog istnieje:
if [ -d /home/mariusz ]
then
        echo "jest"
else
        echo "nie ma:("
fi

M.

stiuart

  • Gość
kopiowanie plików
« Odpowiedź #3 dnia: 2007-10-03, 11:29:09 »
jesli chciałbym zrobic ten skrypt do dowolnego katalogu to jak by on wygladał ??

Offline

  • Users
  • Guru
  • *****
  • Wiadomości: 825
    • Zobacz profil
kopiowanie plików
« Odpowiedź #4 dnia: 2007-10-03, 11:30:37 »
Zmieniasz /home/mariusz na $1.
$1 jest to pierwszy paramter który przekazujesz do skryptu.
Czyli wywołanie będzie ./skrypt katalog

M.

stiuart

  • Gość
kopiowanie plików
« Odpowiedź #5 dnia: 2007-10-03, 11:42:27 »
czyli wnioskując z tego co mi pisaliscie to bedzie to wyglądało nastepnująco

#!/bin/bash
$1=$/$"file"
if [ -d /$1 ]
then
        echo "jest"
else
        echo "nie ma:("
fi
f [[ `ls $1` != "" ]];then
  echo ...
else
  echo ...
fi

Offline

  • Users
  • Guru
  • *****
  • Wiadomości: 825
    • Zobacz profil
kopiowanie plików
« Odpowiedź #6 dnia: 2007-10-03, 11:50:56 »
Według mnie wystarczy jeden "if".
W miejscu gdzie jest "jest" wpisujesz swoje kopiowanie.
Natomiast wydaje mi się, że powinieneś dodać drugi prametr skryptu($2) określający położenie docelowe.

M.

stiuart

  • Gość
kopiowanie plików
« Odpowiedź #7 dnia: 2007-10-03, 11:59:23 »
#!/bin/bash
$1=$/$"file"
$2=$/$"file"
         if [ -d /$1 ]
           then
              echo "jest"

                      if [[ `ls $1` != "" ]];then
                           echo ...
                       else
                           echo ...
                      fi
                   for file in' ls $1 '; do if[ -x "$1/$file"]; then mv "$2/$file";fi;done

else
        echo "nie ma:("
fi
 znalazłem ten fragment z jednego zadanka dorzuciłem i nie wiem czy pójdzie

Offline

  • Users
  • Guru
  • *****
  • Wiadomości: 825
    • Zobacz profil
kopiowanie plików
« Odpowiedź #8 dnia: 2007-10-03, 12:05:05 »
Nie wiem czy o tym samym mówimy ale mój skrypt:
mariusz@ciastek:~/skrypt> cat katalog
echo $1 $2
if [ -d $1 ]
then
        cp -rv $1 $2
else
        echo "nie ma:("
fi

M.

stiuart

  • Gość
kopiowanie plików
« Odpowiedź #9 dnia: 2007-10-03, 13:19:06 »
if [ $# !=2 ];then
 echo usage: $0\\ \\
 exit 1
elif [ ! -d $1]; then
 echo katalog zrodlowy nie istnieje!
 exit 1
elif [ ! -d $2 ]; then
 echo Katalog docelowy nie istnieje!
 exit 1
fi
#przenoszenie plików
 mv $1 $2
done



donmarianno co myslisz o tym skrypcie ??

Offline

  • Users
  • Guru
  • *****
  • Wiadomości: 825
    • Zobacz profil
kopiowanie plików
« Odpowiedź #10 dnia: 2007-10-03, 13:22:59 »
Tak, to zdecydowanie poprawne rozwiązanie i mnie się podoba:)
Fajnie, że zawarłeś w tym sprawdzanie ilości parametrów.

M.

stiuart

  • Gość
kopiowanie plików
« Odpowiedź #11 dnia: 2007-10-03, 13:32:54 »
w zadaniu pisało zebym stworzył skrypt kopiujący zawartosc jednego katalogu do drugiego ma on pytac o nazwe katalogu i jak jest katalog pusty powinien wyskoczyc komunikat
wielkie dzięki za pomoc

Offline

  • Users
  • Guru
  • *****
  • Wiadomości: 825
    • Zobacz profil
kopiowanie plików
« Odpowiedź #12 dnia: 2007-10-03, 13:39:15 »
Może to szczegół - używasz "mv"(przesunięcie) a nie "cp"(kopiowanie). Mały szczegół.

M.

stiuart

  • Gość
kopiowanie plików
« Odpowiedź #13 dnia: 2007-10-03, 16:34:22 »
cos mie idzie mi ten skrypt :(
donmarianno ten twój chodzi bez zarzutów :D

Offline

  • Users
  • Guru
  • *****
  • Wiadomości: 825
    • Zobacz profil
kopiowanie plików
« Odpowiedź #14 dnia: 2007-10-03, 16:35:47 »
A daj zamiast "mv" "cp -rv $1 $2"

M.