Skocz do zawartości
Mich@ł

[bash] usuwanie katalogów z pliku

Polecane posty

Potrzebuje odpalić na serwerze prosty skrypt który będzie pobierał nazwę katalogu z pliku tekstowego po czym będzie go usuwał.

 

Obecnie naskrobałem coś takiego:

while read line

do

echo $line;

rm -rdf $line

done < plik.txt

 

A tak wygląda plik z danymi:

nazwa1

nazwa2

nazwa3

 

Odczyt pliku chyba działa ok ponieważ w konsoli pojawiają mi się poszczególne linie. Nie wiem czemu nie chce działać plecenie:

rm -rdf $line

 

Gdy wpisuje w konsoli polecenie rm -rdf nazwa_katalogu to katalog ładnie się usuwa.

 

W czym może być problem :>? W skrypcie basha nie mogę używać takich poleceń czy problem jest w składni?

 

 

Od razu mówię że to moje jedno z pierwszych spotkań z bashem :D

 

Z góry dzięki za pomoc.

 

 

[edit]

Jak widzę problem jest ze zmienna $line ponieważ po wpisaniu nazwy na sztywno katalog się usuwa :/.

 

Dziwne że nie chce działać gdy dam zmienna pobraną z pliku.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

p, niestety ie śmiga. Odpalając Twój skrypt nic się nie dzieje. Próbowałem zmienić "ciapka" ' na " i w efekcie usuwa mi plik z listą katalogów a same katalogi pozostają bez zmian.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

^^KaMaZZ~.^, pełną ścieżke czyli:

/home/nazwa_konta/domains/domena.pl/public_html/nazwa1

 

Próbowałem i niestety też nic się nie dzieje.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

p, niestety ie śmiga. Odpalając Twój skrypt nic się nie dzieje. Próbowałem zmienić "ciapka" ' na " i w efekcie usuwa mi plik z listą katalogów a same katalogi pozostają bez zmian.

Skopiowałeś dokładnie komendę napisaną przez p?

cat plik.txt ma być w odwróconych apostrofach (na klawiaturze to przycisk współdzielony z tyldą - ~/`), a nie normalnych ('/").

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

A jednak skrypt napisany przez p po części działa, usuwa ostatni katalog z listy. A muszę mieć skrypt który usunie około 10 plików (10 linii) podczas 1 wykonania skryptu.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Odpalam dokładnie taki skrypt:

for i in `cat plik.txt`; do rm -rf /home/konto/domains/domena.pl/public_html/bash/$i; done

 

I tak jak już wspomniałem usuwanie działa tyle że usuwa tylko ostatni katalog z listy czyli tak jak by nie śmigała pętla.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nie prosciej uzyc xargs?

 

Dod. pamietaj o roznicy pomiedzy sciezka wzgledna a bezwgledna.

 

22:33:16 - lurtz@s1 ~/tmp $ cat lista

1

2

3

4

5

6

7

8

9

22:33:19 - lurtz@s1 ~/tmp $ cat lista | xargs rm -rf

22:33:26 - lurtz@s1 ~/tmp $ ls

22:33:27 - lurtz@s1 ~/tmp $

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

sysunit, polecenie "cat lista | xargs rm -rf" niestety nie usuwa katalogów (w katalogach są pliki). W sumie chyba nic się nie dzieje po wykonaniu tego polecenia (wpisuje je bezpośrednio do konsoli).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Eh moze po prostu pokaz 2 rzeczy:

 

pwd

 

cat (ta twoja lista)

 

i wylistuj chociaz jeden katalog z tej listy za pomoca ls -la

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

pwd:

/home/konto/domains/domena.pl/public_html/bash

 

kat1:

serwer:/home/konto/domains/domena.pl/public_html/bash/kat1# ls -la

razem 176

drwxr-xr-x 2 konto konto 4096 lip 1 20:51 .

drwxr-xr-x 4 konto konto 4096 lip 1 22:54 ..

-rw-r--r-- 1 konto konto 49736 lip 1 20:51 Faktura_proforma_nr_PROF_1_07_2010.pdf

-rw-r--r-- 1 konto konto 51504 lip 1 20:51 Faktura_proforma_nr_PROF_17_06_2010.pdf

-rw-r--r-- 1 konto konto 51774 lip 1 20:51 Faktura_VAT_nr_23_06_2010_ORYGINAL.pdf

 

Mój plik z listą nazw katalogów:

kat1

kat2

kat3

 

Lista plików w katalogu kat1 jest przypadkowa ponieważ są to jedynie katalogi testowe. Z usuwaniem katalogów ogólnie nie ma problemu ponieważ przy użyciu polecenia:

rm -rdf nazwa_kat

katalog się usuwa.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

tak wiec bedac w katalogu bash i jesli faktycznie plik z lista ma kazdy katalog w osobnej sciezce wydaj polecenie:

 

cat twoja_lista | xargs rm -rf

 

i _musi_ to zadzialac.

 

eot.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Odpalam to polecenie będąc w katalogi bash i niestety brak efektów.

 

[edit]

Oczywiście dostosowałem je do swojego pliku z listą katalogów.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
A jednak skrypt napisany przez p po części działa, usuwa ostatni katalog z listy. A muszę mieć skrypt który usunie około 10 plików (10 linii) podczas 1 wykonania skryptu.

Nie po częsci, tylko działa. Po prostu coś zepsułeś :D

 

p@vbox:~/x$ tree
.
|-- 1
|   |-- a
|   `-- b
|-- 2
|   |-- c
|   `-- d
|-- 3
|   |-- e
|   `-- f
`-- list

9 directories, 1 file
p@vbox:~/x$ cat list
1
2
3
p@vbox:~/x$ for i in `cat list`; do rm -rf $i; done
p@vbox:~/x$ tree
.
`-- list

0 directory, 1 file

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Hehehe bardzo możliwe że coś popsułem :D Rano spróbuje jeszcze raz :D Ogólnie w pewnym sensie usuwanie w ten sposób nawet 1 katalogu już spełnia moje oczekiwania (jedynie proces usuwania się wydłuży do 3 dni) :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

p, śmiga, przynajmniej na docelowych katalogach :D

 

Nie mam pojęcia co robiłem nie tak :D

 

Dziękuje wszystkim za pomoc :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Skrypcik niegłupi i zapewne przydatny, ale równie dobrze mogłeś po prostu użyć Midnight Commandera :D

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

d.v, nie mogłem z uwagi na to że ten skrypcik jest częścią innego skryptu do czyszczenia katalogów i baz danych :)

 

Na początku zakładałem że katalogi będę kasował z poziomu php tak jak były tworzone tyle że miałem problemy z uprawnieniami dlatego postanowiłem spróbować z bashem :D

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×