Bash, masowe tworzenie katalogów na podstawie pliku txt

Problemy dotyczące programowania.

Moderatorzy: Moderatorzy, Administratorzy

Awatar użytkownika
Sektor
Użytkownik
Posty: 271
Rejestracja: 2004-08-28, 12:21
Lokalizacja: Kraków

Bash, masowe tworzenie katalogów na podstawie pliku txt

Post autor: Sektor »

Witam
Mam plik 'test'

Kod: Zaznacz cały

pimpek
hamulce
kalafior
bomba
papryka
Jak teraz z poziomu bash'a wygeenrować w pętli katalogi o tej nazwie ? Mam na myśli żeby bash wygenerował je czytająć ten plik tekstowy

Pozdrawiam
Awatar użytkownika
nOrNIc
Użytkownik
Posty: 478
Rejestracja: 2005-02-10, 00:41
Lokalizacja: Edinburgh

Re: Bash, masowe tworzenie katalogów na podstawie pliku txt

Post autor: nOrNIc »

skrypt.sh:

Kod: Zaznacz cały

#!/bin/bash
for i in `cat $1`; do
  mkdir $i
done
uruchamiasz

Kod: Zaznacz cały

./skrypt.sh twoj_plik
Tworzy katalogi w miejscu gdzie uruchomiles skrypt, oczywiscie na podstawie twojego pliku
Ostatnio zmieniony 2006-08-21, 17:28 przez nOrNIc, łącznie zmieniany 2 razy.
[url=http://pin.if.uz.zgora.pl/beton/][img]http://pin.if.uz.zgora.pl/~beton/bdt-ready.png[/img][/url] [url=http://www.slackware.com][img]http://pin.if.uz.zgora.pl/~nornic/images/slackware.png[/img][/url] [url=http://www.firefox.pl][img]http://firefox.pl/promo/firefox_apxl.png[/img][/url] [url=http://www.google.pl][img]http://pin.if.uz.zgora.pl/~nornic/images/google.png[/img][/url] #416576
Awatar użytkownika
difrost
Moderator
Posty: 2802
Rejestracja: 2006-03-11, 12:31
Lokalizacja: Wrocław
Kontakt:

Re: Bash, masowe tworzenie katalogów na podstawie pliku txt

Post autor: difrost »

Kod: Zaznacz cały

#!/bin/bash

if [ $# -ne 1 ]; then
   echo "Podaj plik z katalogami!"
   exit 1
fi
DIRFILE=$1
if [ ! -r "$DIRFILE" ]; then
   echo "Nie mozna czytac z pliku $DIRFILE"
   exit 2
fi

for fdir in $(cat $DIRFILE) ; do
  if [ -d $fdir ]; then
        echo "Katalog - $fdir - istnieje!"
  else
      echo "Tworze katalog $fdir"
     mkdir -p $fdir 2>>/dev/null
     if [ $? -ne 0 ]; then
        echo "Tworzenie katalogu nie powiodlo sie!"
     fi
  fi
done
Jako parametr podajesz sciezke do pliku z lista katalogow.
Ostatnio zmieniony 2006-08-21, 17:34 przez difrost, łącznie zmieniany 3 razy.
[url=http://bdtk.sourceforge.net][img]http://pin.if.uz.zgora.pl/~beton/bdt-ready.png[/img][/url] #337142
--------------------------------------------
"I had a letter in the post today. It said 'Gas Bill'. It sounds a tempting offer." -- Alan Cox
"Users have been trained that when a computer bluescreens and losing all of their data, it's either (a) just the way things are, or (b) it's microsoft's fault." -- Theodore Tso
Awatar użytkownika
mina86
Moderator
Posty: 3343
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Bash, masowe tworzenie katalogów na podstawie pliku txt

Post autor: mina86 »

nOrNIc, niby poprawnie, ale po co robić for .. in $(cat ..)?

difrost, no niestety - Twój kod stworzy jeden katalog o nazwie taka jak zawartość całego pliku.

Kod: Zaznacz cały

while IFS= read DIR; do
    mkdir -pv -- "$DIR"
done <"$1"
Czyta po jednej linijce z pliku podanego jako argument i tworzy odpowiedni katalog. Jeżeli w pliku na początku lub końcu linii będą spacje to w nazwie katalogu też one się znajdą.
Ostatnio zmieniony 2006-08-21, 17:31 przez mina86, łącznie zmieniany 1 raz.
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
Awatar użytkownika
difrost
Moderator
Posty: 2802
Rejestracja: 2006-03-11, 12:31
Lokalizacja: Wrocław
Kontakt:

Re: Bash, masowe tworzenie katalogów na podstawie pliku txt

Post autor: difrost »

mina86 pisze: difrost, no niestety - Twój kod stworzy jeden katalog o nazwie taka jak zawartość całego pliku.
Nie! Katalogi stworzy. Ewentulanie pierwszy warunek if sprawi mu problem. Ale be "" bedzie ooOOKk
Ostatnio zmieniony 2006-08-21, 17:35 przez difrost, łącznie zmieniany 1 raz.
[url=http://bdtk.sourceforge.net][img]http://pin.if.uz.zgora.pl/~beton/bdt-ready.png[/img][/url] #337142
--------------------------------------------
"I had a letter in the post today. It said 'Gas Bill'. It sounds a tempting offer." -- Alan Cox
"Users have been trained that when a computer bluescreens and losing all of their data, it's either (a) just the way things are, or (b) it's microsoft's fault." -- Theodore Tso
Awatar użytkownika
nOrNIc
Użytkownik
Posty: 478
Rejestracja: 2005-02-10, 00:41
Lokalizacja: Edinburgh

Re: Bash, masowe tworzenie katalogów na podstawie pliku txt

Post autor: nOrNIc »

mina86 pisze:nOrNIc, niby poprawnie, ale po co robić for .. in $(cat ..)?
egh ciagle zapominam o read ;-)
[url=http://pin.if.uz.zgora.pl/beton/][img]http://pin.if.uz.zgora.pl/~beton/bdt-ready.png[/img][/url] [url=http://www.slackware.com][img]http://pin.if.uz.zgora.pl/~nornic/images/slackware.png[/img][/url] [url=http://www.firefox.pl][img]http://firefox.pl/promo/firefox_apxl.png[/img][/url] [url=http://www.google.pl][img]http://pin.if.uz.zgora.pl/~nornic/images/google.png[/img][/url] #416576
Awatar użytkownika
mina86
Moderator
Posty: 3343
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Bash, masowe tworzenie katalogów na podstawie pliku txt

Post autor: mina86 »

difrost, Tak!

Kod: Zaznacz cały

$ cat foo
asd
qwe
zxc
$ for fdir in "$(cat foo)"; do echo Tworze katalog "$fdir"; done
Tworze katalog asd
qwe
zxc
$ 
Poza tym jest błąd bo nie dałeś $DIRFILE w cudzysłowy.
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
Awatar użytkownika
difrost
Moderator
Posty: 2802
Rejestracja: 2006-03-11, 12:31
Lokalizacja: Wrocław
Kontakt:

Re: Bash, masowe tworzenie katalogów na podstawie pliku txt

Post autor: difrost »

A sa katalogi??
[url=http://bdtk.sourceforge.net][img]http://pin.if.uz.zgora.pl/~beton/bdt-ready.png[/img][/url] #337142
--------------------------------------------
"I had a letter in the post today. It said 'Gas Bill'. It sounds a tempting offer." -- Alan Cox
"Users have been trained that when a computer bluescreens and losing all of their data, it's either (a) just the way things are, or (b) it's microsoft's fault." -- Theodore Tso
Awatar użytkownika
nOrNIc
Użytkownik
Posty: 478
Rejestracja: 2005-02-10, 00:41
Lokalizacja: Edinburgh

Re: Bash, masowe tworzenie katalogów na podstawie pliku txt

Post autor: nOrNIc »

difrost pisze:A sa katalogi??
katalogi sa, ale w takim wypadku po co ten balagan w komunikatach - tylko myla.
Znow niepotrzebnie komplikujesz kod ;-)
[url=http://pin.if.uz.zgora.pl/beton/][img]http://pin.if.uz.zgora.pl/~beton/bdt-ready.png[/img][/url] [url=http://www.slackware.com][img]http://pin.if.uz.zgora.pl/~nornic/images/slackware.png[/img][/url] [url=http://www.firefox.pl][img]http://firefox.pl/promo/firefox_apxl.png[/img][/url] [url=http://www.google.pl][img]http://pin.if.uz.zgora.pl/~nornic/images/google.png[/img][/url] #416576
Awatar użytkownika
difrost
Moderator
Posty: 2802
Rejestracja: 2006-03-11, 12:31
Lokalizacja: Wrocław
Kontakt:

Re: Bash, masowe tworzenie katalogów na podstawie pliku txt

Post autor: difrost »

nOrNIc pisze:
difrost pisze:A sa katalogi??
katalogi sa, ale w takim wypadku po co ten balagan w komunikatach - tylko myla.
Znow niepotrzebnie komplikujesz kod ;-)
Do nOrRy!!! :rotfl: Siedz sobie tam na tym Windosie i klikaj w Exploder!
[url=http://bdtk.sourceforge.net][img]http://pin.if.uz.zgora.pl/~beton/bdt-ready.png[/img][/url] #337142
--------------------------------------------
"I had a letter in the post today. It said 'Gas Bill'. It sounds a tempting offer." -- Alan Cox
"Users have been trained that when a computer bluescreens and losing all of their data, it's either (a) just the way things are, or (b) it's microsoft's fault." -- Theodore Tso
Awatar użytkownika
Sektor
Użytkownik
Posty: 271
Rejestracja: 2004-08-28, 12:21
Lokalizacja: Kraków

Re: Bash, masowe tworzenie katalogów na podstawie pliku txt

Post autor: Sektor »

Ludzie, nie pozabijajcie się od razu :)
Przecież po to jest forum, żeby się wypowiedzieć i porównać rozwiązania :)

Dziękuję za wszystkie rozwiążania
Pozdrawiam
Awatar użytkownika
nOrNIc
Użytkownik
Posty: 478
Rejestracja: 2005-02-10, 00:41
Lokalizacja: Edinburgh

Re: Bash, masowe tworzenie katalogów na podstawie pliku txt

Post autor: nOrNIc »

difrost pisze:Do nOrRy!!! :rotfl: Siedz sobie tam na tym Windosie i klikaj w Exploder!
Ty juz mnie nie draznij. Tyle co przez ostatnie tygodnie to ja myszki nigdy w rekach nie mialem... :evil:

juz mi powoli brakuje bash'a a nie bede wlaczal slax'a zeby sie linuxem pobawic :P jeszcze nie nalogowiec hehehe
Ostatnio zmieniony 2006-08-21, 17:53 przez nOrNIc, łącznie zmieniany 1 raz.
[url=http://pin.if.uz.zgora.pl/beton/][img]http://pin.if.uz.zgora.pl/~beton/bdt-ready.png[/img][/url] [url=http://www.slackware.com][img]http://pin.if.uz.zgora.pl/~nornic/images/slackware.png[/img][/url] [url=http://www.firefox.pl][img]http://firefox.pl/promo/firefox_apxl.png[/img][/url] [url=http://www.google.pl][img]http://pin.if.uz.zgora.pl/~nornic/images/google.png[/img][/url] #416576
Awatar użytkownika
mina86
Moderator
Posty: 3343
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Bash, masowe tworzenie katalogów na podstawie pliku txt

Post autor: mina86 »

difrost, ok, no to widzę, że już wywaliłeś ten cudzysłów z $(cat $DIRFILE), ale nadal brakuje cudzysłowiów wokół $DIRFILE. Reszta to już kwestia upodobań. Osobiście nie widzę potrzeby bawienia się w jakieś sprawdzania czy katalog istnieje, czy udało się stworzyć itp. skoro można dać argument -pv do mkdir i on już wszystko ładnie posprawzda i wypisze.

W ogole, jeżeli nazwy katalogów mają być oddzielone spacją (czy innym białym znakiem), a niekoniecznie znakiem przejścia do nowej linii to wybaczcie, ale po co jakieś pętle?

Kod: Zaznacz cały

xargs mkdir -pv -- <plik
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
Awatar użytkownika
nOrNIc
Użytkownik
Posty: 478
Rejestracja: 2005-02-10, 00:41
Lokalizacja: Edinburgh

Re: Bash, masowe tworzenie katalogów na podstawie pliku txt

Post autor: nOrNIc »

mina86 pisze:W ogole, jeżeli nazwy katalogów mają być oddzielone spacją (czy innym białym znakiem), a niekoniecznie znakiem przejścia do nowej linii to wybaczcie, ale po co jakieś pętle?

Kod: Zaznacz cały

xargs mkdir -pv -- <plik
Ale w pierwotnym zadaniu bylo ze katalogi oddzielone sa \n a nie bialym znakiem. Poza tym chyba niektorzy lubi nazwy katalogow ze spacja w srodku :P
[url=http://pin.if.uz.zgora.pl/beton/][img]http://pin.if.uz.zgora.pl/~beton/bdt-ready.png[/img][/url] [url=http://www.slackware.com][img]http://pin.if.uz.zgora.pl/~nornic/images/slackware.png[/img][/url] [url=http://www.firefox.pl][img]http://firefox.pl/promo/firefox_apxl.png[/img][/url] [url=http://www.google.pl][img]http://pin.if.uz.zgora.pl/~nornic/images/google.png[/img][/url] #416576
Awatar użytkownika
mina86
Moderator
Posty: 3343
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Bash, masowe tworzenie katalogów na podstawie pliku txt

Post autor: mina86 »

nOrNIc pisze:Ale w pierwotnym zadaniu bylo ze katalogi oddzielone sa \n a nie bialym znakiem. Poza tym chyba niektorzy lubi nazwy katalogow ze spacja w srodku :P
No to ani Twoje rozwiązanie ani rozwiązanie difrosta nie jest poprawne.
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
ODPOWIEDZ