Nowe posty

Autor Wątek: skryp usuwający pliki  (Przeczytany 9672 razy)

robin5hood

  • Gość
skryp usuwający pliki
« dnia: 2008-05-12, 14:59:39 »
Witam
Jak napisac skrypt  usuwający jednocześnie wszystkie pliki o rozszerzeniach np. txt i tmp?

arctgx

  • Gość
skryp usuwający pliki
« Odpowiedź #1 dnia: 2008-05-12, 15:05:30 »
Czyżby to kolejne zadanko domowe? Za pomocą czego chcesz usunąć te pliki i skąd? Języków skryptowych jest wiele.

maciasz

  • Gość
skryp usuwający pliki
« Odpowiedź #2 dnia: 2008-05-12, 15:40:04 »
Pachnie zadaniem domowym z daleka!!!

robin5hood

  • Gość
skryp usuwający pliki
« Odpowiedź #3 dnia: 2008-05-12, 15:52:49 »
To nie zadanie domowe. Takie mi przyszło do głowy, bo sie dopiero ucze.
Nie wiem czy nie napisze głupoty ale prosze o wyrozumiałość
Chce usunąć wszystkie pliki o tych rozszerzeniach z wszystkich katalogów w linuxie :(

arctgx

  • Gość
skryp usuwający pliki
« Odpowiedź #4 dnia: 2008-05-12, 16:04:55 »
To załatwisz w jednej linijce - nie trzeba żadnych skryptów. A skoro chcesz się uczyć, zerknij w dział "Rozwijanie nazw plików" w man bash. Na początek jednak poszukaj po sieci (także na tym portalu) podstaw korzystania z poleceń konsoli, w tym powłoki bash, która dominuje w Linuksie.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
skryp usuwający pliki
« Odpowiedź #5 dnia: 2008-05-12, 16:15:28 »
> Chce usunąć wszystkie pliki o tych rozszerzeniach z wszystkich katalogów w linuxie :(

To chyba najlepiej poleceniem "find" ze ścieżką początkową "/" z akcją "rm" dla znalezionych plików.

Tyle, że odradzam usuwać wszystkie txt, bo raczej mogą się przydać.

A pliki tymczasowe raczej nie mają rozszerzeń .tmp w Linuksie. Po prostu siedzą w /tmp i ew. innych katalogach (np w katalogu domowym w katalogu tymczasowym środowiska KDE (gdzieś w ~/.kde/...). Więc to raczej trzeba by wyczyścić zawartość tych katalogów.

robin5hood

  • Gość
skryp usuwający pliki
« Odpowiedź #6 dnia: 2008-05-12, 16:26:59 »
zrobiłem taki kod w pętli
ale dla jednego pliku> jak go zmodyfikować dla 2? i żeby się wyswietlało czy na pewno chce usunąć te pliki?
#!/bin/bash
for file in *.txt
do rm -v $file done
Ed: http://forum.linux.pl/help.php#bbcode

arctgx

  • Gość
skryp usuwający pliki
« Odpowiedź #7 dnia: 2008-05-12, 16:27:15 »
Skoro o find, to ma ono opcję nakazującą pytać użytkownika czy wykonać zadaną akcję (np. usunięcie) na każdym znalezionym pliku z osobna.

man find (podobnie jak man bash) jest dostępny po polsku.

arctgx

  • Gość
skryp usuwający pliki
« Odpowiedź #8 dnia: 2008-05-12, 16:31:32 »
Cytat: robin5hood
zrobiłem taki kod w pętli
ale dla jednego pliku> jak go zmodyfikować dla 2? i żeby się wyswietlało czy na pewno chce usunąć te pliki?
#!/bin/bash
for file in *.txt
do rm -v $file done
Tak proste polecenie możesz dać w jednej linii: zobacz http://forum.linux.pl/viewtopic.php?pid=82593#p82593 i zwróć uwagę kiedy trzeba pisać średniki i kiedy warto cudzysłowy.

Dlaczego miałoby działać tylko na jednym pliku? Może po prostu nie masz ich więcej w bieżącym katalogu ;)

maciasz

  • Gość
skryp usuwający pliki
« Odpowiedź #9 dnia: 2008-05-12, 23:35:02 »
Cytat: robin5hood
To nie zadanie domowe. Takie mi przyszło do głowy, bo sie dopiero ucze.
Nie wiem czy nie napisze głupoty ale prosze o wyrozumiałość
Chce usunąć wszystkie pliki o tych rozszerzeniach z wszystkich katalogów w linuxie :(
A to zwracam honor :). Jak napisano wcześniej polecenie find powinno wszystko załatwić.

robin5hood

  • Gość
skryp usuwający pliki
« Odpowiedź #10 dnia: 2008-05-13, 15:38:21 »
a czemu ten skrypt nie działa, nie wiem co chodzi z tymi średnikami i cudzosłowiami

ff $ touch "a b"
  ff $ ls -1
a b
  ff $ for i in *; do cp $i /tmp; done
cp: nie można wykonać stat na `a': Nie ma takiego pliku ani katalogu
cp: nie można wykonać stat na `b': Nie ma takiego pliku ani katalogu
  ff $ for i in *; do cp "$i" /tmp; done
`a b' -> `/tmp/a b'
  ff $ echo \\"$IFS\\"
" "

arctgx

  • Gość
skryp usuwający pliki
« Odpowiedź #11 dnia: 2008-05-13, 16:08:49 »
Cytat: robin5hood
a czemu ten skrypt nie działa, nie wiem co chodzi z tymi średnikami i cudzosłowiami

ff $ touch "a b"
  ff $ ls -1
a b
  ff $ for i in *; do cp $i /tmp; done
cp: nie można wykonać stat na `a': Nie ma takiego pliku ani katalogu
cp: nie można wykonać stat na `b': Nie ma takiego pliku ani katalogu
  ff $ for i in *; do cp "$i" /tmp; done
`a b' -> `/tmp/a b'
  ff $ echo \\"$IFS\\"
" "
Z niedowierzaniem widzę tylko jedną interpretację: czyżbyś wkleił całość do pliku i zapuścił jako skrypt?

Chyba czeka Cię sporo lektury - mozolnego studiowania (jeśli tak to mogę nazwać) gotowych przykładów z opisami, których naprawdę nie brak w sieci.

robin5hood

  • Gość
skryp usuwający pliki
« Odpowiedź #12 dnia: 2008-05-13, 17:09:14 »
no tak jakaś pewnie gafa :(
a co mam zrobić z tym kodem powyższym, jeśli mozesz napisać?


---- Ten wątek został podzielony ----
Wszystkie oddzielone posty znajdują się tutaj.
(Podziału dokonał użytkownik arctgx)

arctgx

  • Gość
skryp usuwający pliki
« Odpowiedź #13 dnia: 2008-05-13, 21:38:25 »
Cytat: robin5hood
no tak jakaś pewnie gafa :(
a co mam zrobić z tym kodem powyższym, jeśli mozesz napisać?
Proponuję Ci zostawić go na później, a wziąć się za przerabianie wspomnianych materiałów, które pomogą Ci zrozumieć trochę podstaw.

xavery

  • Gość
skryp usuwający pliki
« Odpowiedź #14 dnia: 2008-05-14, 16:54:53 »
Cytat: robin5hood
a czemu ten skrypt nie działa, nie wiem co chodzi z tymi średnikami i cudzosłowiami

ff $ touch "a b"
  ff $ ls -1
a b
  ff $ for i in *; do cp $i /tmp; done
cp: nie można wykonać stat na `a': Nie ma takiego pliku ani katalogu
cp: nie można wykonać stat na `b': Nie ma takiego pliku ani katalogu
Tworzysz jeden plik o nazwie "a b" (ze spacją) a następnie piszesz pętlę gdzie separatorem listy elementów jest właśnie spacja. Zatem pętla którą napisałeś jest rozwijana do postaci:
for i in a b; do ...
co można przetłumaczyć jako: "dla każdego pliku a i b zrób...". Pętla po prostu spodziewa się dwóch plików o nazwach "a" i "b". Aby się przed tym zjawiskiem zabezpieczyć najwygodniej zacytować tę listę:

for i in "*"; do...

Można też z separatora pola wejścowego (zmienna IFS) usunąć znak spacji.