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.
khelidan1980
23-01-2008, 22:47
rm -rf cartella/*
Ma scusa l'ha scritto nel post che non funziona
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".
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
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...
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
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 ;)
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
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.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.