PDA

View Full Version : rm: come eliminare tutti i files all'interno di una directory?


darkbasic
23-01-2008, 22:18
L'ho già chiesto altre volte in altri topic, ma nessuno ha mai saputo rispondermi. Badate bene che non voglio eliminare le directory, ma solo i files.
La domanda può sembrare delle più stupide, ma non è poi così banale: con un rm * infatti non vengono eliminati i files nascosti, per i quali è necessario un rm .* (ma in questo caso vengono eliminati SOLO i file nascosti).
Tra l'altro con quest'ultimo comando mi tocca reindirizzare l'stderr su /dev/null, perché rm ha l'accortezza di farmi notare che:
rm: impossibile rimuovere la directory `.'
rm: impossibile rimuovere la directory `..'
:doh:
Ho provato a giocare con i caratteri jolly (rm ?*) o ad utilizzare la ricorsione (non si sa mai :D ), ma non c'è verso di ottenere quello che voglio se non concatenando due comandi :stordita:
Vale la stessa cosa per l'amico cp :muro:
Come fare? Non ditemi di creare uno script da mettere nel path perché non la ritengo una soluzione.

Hire
23-01-2008, 22:39
rm -rf cartella/*

khelidan1980
23-01-2008, 22:47
rm -rf cartella/*

Ma scusa l'ha scritto nel post che non funziona

guldo76
23-01-2008, 23:35
Quindi vuoi eliminare tutti i file nella directory foo/ ma non le directory, e non ricorsivamente?
Cioè:

$ mkdir --parent foo/bar
$ touch foo/{.,}test1
$ touch foo/bar/{.,}test2
$ find foo/ -maxdepth 1 -type f -exec rm --verbose {} \;
`foo/test1' rimosso
`foo/.test1' rimosso
$ ls -RA foo/
foo/:
bar

foo/bar:
test2 .test2
$
OK?

EDIT: se vuoi eliminare tutti i file, ricorsivamente, basta che togli l'opzione "-maxdepth 1".

Hire
23-01-2008, 23:41
Ma scusa l'ha scritto nel post che non funziona

Ho fatto il test e funziona, sia con files normali che nascosti. Comprese le cartelle, ovviamente :O

arara
24-01-2008, 10:36
Non mi ero mai accorto che con rm -rf * i file nascosti non venivano cancellati. :doh:

Cosi invece funziona:
rm -rf .* *


Ho fatto il test e funziona, sia con files normali che nascosti. Comprese le cartelle, ovviamente :O
Forse dipende dalle impostazioni della distro, da me su fedora con rm -rf * i file nascosti restano...

Hire
24-01-2008, 11:22
Forse dipende dalle impostazioni della distro, da me su fedora con rm -rf * i file nascosti restano...

Ho riprovato ma non va... ieri non so perchè ma ha funzionato :(

Sennò si può fare rm -rf .* *
Solo che da un warning perchè non riesce a cancellare le cartell . e .. :O

VICIUS
24-01-2008, 11:33
Quindi vuoi eliminare tutti i file nella directory foo/ ma non le directory, e non ricorsivamente?
Cioè:

$ mkdir --parent foo/bar
$ touch foo/{.,}test1
$ touch foo/bar/{.,}test2
$ find foo/ -maxdepth 1 -type f -exec rm --verbose {} \;
`foo/test1' rimosso
`foo/.test1' rimosso
$ ls -RA foo/
foo/:
bar

foo/bar:
test2 .test2
$
OK?

EDIT: se vuoi eliminare tutti i file, ricorsivamente, basta che togli l'opzione "-maxdepth 1".

Al posto di quella -exec puoi usare semplicemente -delete che fa la stessa cosa :)

khelidan1980
24-01-2008, 13:02
Ho riprovato ma non va... ieri non so perchè ma ha funzionato :(



Com'è giusto che sia,i file nascosti di solito contengo configurazione,è giusto che non vengano zappati cosi impunemente! ;)

darkbasic
24-01-2008, 16:39
Quindi vuoi eliminare tutti i file nella directory foo/ ma non le directory, e non ricorsivamente?
Cioè:

$ mkdir --parent foo/bar
$ touch foo/{.,}test1
$ touch foo/bar/{.,}test2
$ find foo/ -maxdepth 1 -type f -exec rm --verbose {} \;
`foo/test1' rimosso
`foo/.test1' rimosso
$ ls -RA foo/
foo/:
bar

foo/bar:
test2 .test2
$
OK?

EDIT: se vuoi eliminare tutti i file, ricorsivamente, basta che togli l'opzione "-maxdepth 1".
Ho specificato nel primo post che non ritengo uno script una soluzione comoda.

Sembra che l'unica sia "rm .* *" con conseguente output-monnezza :stordita:
rm .* * 2> /dev/null non darebbe niente in output, ma è scomodo da scrivere e ti priva di eventuali output utili.

darkbasic
24-01-2008, 16:43
Sennò si può fare rm -rf .* *
Solo che da un warning perchè non riesce a cancellare le cartell . e .. :O
Infatti la ricorsione non serve ;)

guldo76
24-01-2008, 17:27
Al posto di quella -exec puoi usare semplicemente -delete che fa la stessa cosa :)
Ah, buono a sapersi.
Non l'avevo notato, nella pagina man. :stordita:

Ho specificato nel primo post che non ritengo uno script una soluzione comoda.
Ma quello che ho postato era un bell'esempio "chiavi in mano" :D dell'uso di find.
L'unica istruzione che devi eseguire tu è (grazie VICIUS):
$ find foo/ -maxdepth 1 -type f -delete

darkbasic
24-01-2008, 17:56
Ma quello che ho postato era un bell'esempio "chiavi in mano" :D dell'uso di find.
:doh:
Ammetto che quando ho visto il papier ho subito pensato allo script :p anche perché mi sono visto proporre come soluzioni comandi che avevo specificato _non funzionanti_ e pensavo che ti fossi fermato anche tu alla lettura del titolo :D

Hire
24-01-2008, 18:21
Infatti la ricorsione non serve ;)

Per cancellare le cartelle, si :O

darkbasic
24-01-2008, 20:22
Per cancellare le cartelle, si :O
In quel caso allora * è superfluo. Ovviamente era riferito allo scopo che mi prefiggevo: eliminare tutti i files, nascosti e non.