Ciao Davide, Ti ringrazio per avermi fatto riflettere sulla possibilità che alcune versioni di *nix possano fare qualche limitato danno con la riga che avevo proposto.
L'obiettivo iniziale era cancellare ogni file e dir contenuto nelle directory contenute in /scambio/, senza cancellare queste ultime. Il mio suggerimento a questo punto è: $ rm -rf /scambio/*/* /scambio/*/.[^.]* che, come hai consigliato, evita /scambio/*/. e /scambio/*/.. Ciò detto, mi permetto di non esser d'accordo col resto che scrivi e ti rispondo nel seguito. Il Mer, 24 Ottobre 2012 6:43 pm, Davide Prina ha scritto: > perché io sapevo che le regole era queste: rm cancella tutti i file > tranne quelli inizianti per ., per cancellare quelli dovevi indicare il Spiace doverti contraddire, ma non è mai stato così. rm non cancella "tutti i file", ma esattamente quelli che vengono specificati nei parametri. Non confondere il comportamento del comando "rm" con la sostituzione che la shell fa dei caratteri jolly (come "*"). Se digiti "rm *", il comando rm non "vede" l'asterisco, ma una lista di parametri che la shell espande _prima_ di lanciare il comando. Stessa cosa per "rm .*", dal punto di vista di rm non c'è alcuna differenza sostanziale, se non per il fatto che la lista di parametri ovviamente cambia. Per stupirsi di come "*" funzioni e meditare un po' in proposito, ti propongo di provare a digitare in una shell le righe seguenti: mkdir -p /tmp/provashell/z;cd /tmp/provashell #Per metterci al sicuro. touch z/uno z/due ls .a #Creiamo qualche file... * #Esattamente un asterisco senza altro e poi invio mv ls rmdir #Cambiamo nome ad un file e * #di nuovo lo stesso asterisco... con risultati diversi echo * #Un paio di echo per capire cosa succede echo .* #mettendo o no un punto * .* #Qualche bizzarria echo * .* #per finire Si può consigliare in proposito la lettura del manuale della shell, il paragrafo interessante dovrebbe chiamarsi "Pathname Expansion", anche se non sempre è molto chiaro... > . come primo carattere del file passato a rm. Se poi passavi rm -rf .*, > allora cancellava tutti i file, compresi quelli speciali in modo rm -rf cancella in modo ricorsivo (r) e senza chiedere conferme (f), comprese directory. Il fatto che i parametri che riceve come nomi da cancellare abbiano o meno dei punti non cambia nulla nel suo comportamento. > quanto ho detto è vero, come dicono gli appunti di informatica libera, Mi spiace dover smentire anche una fonte cosi' simpatica, ma non è vero e non lo è mai stato. Certamente il fatto che l'autore degli appunti abbia preso qualche abbaglio non diminuisce il valore del suo alacre lavoro. Sono propenso ad immaginare che, semplicemente, non abbia mai provato. Senza entrare nelle pieghe del comportamento della shell, basta un'analogia per capirlo. Cosa fa "rm -rf a*"? Cancella, dalla dir corrente, file e le directory il cui nome inizia per "a", compreso il contenuto di queste ultime senza badare alle iniziali dei nomi, punti inclusi. Perché mai "rm -rf .*" dovrebbe comportarsi in modo diverso? Gli autori di Unix avrebbero previsto un'apposita eccezione? Per rendere il comando più pericoloso?!? Che si rischi di cancellare .. è possibile, ma di certo non succede che la ricorsione "cambi direzione" cancellando anche ../.. , ../../.. e via di seguito. Non è mai successo, in nessuna versione di *nix. Con buona pace della teoria degli appunti. Come premesso, "rm -rf .[^.]*" dovrebbe fugare ogni dubbio. Fammi sapere che ne pensi! m -- http://bodrato.it/software/strassen.html -- Per REVOCARE l'iscrizione alla lista, inviare un email a [email protected] con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a [email protected] To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected] Archive: http://lists.debian.org/[email protected]

