Newsgroup: it.comp.os.linux.iniziare
Titolo: [Terminale] Cancellare tutti i file di una cartella, ma non le sottocartelle

Ciao a tutti,
sono già un paio di volte che mi capita la situazione in oggetto.
Cioè durante la scrittura di uno script (make) ho la necessità di 
cancellare tutti i file contenuti in una cartella, quindi utilizzo il 
comando:
 
rm -f cartella/*
rm: impossibile rimuovere "cartella/subfolder1": È una directory
rm: impossibile rimuovere "cartella/subfolder2": È una directory
rm: impossibile rimuovere "cartella/subfolder3": È una directory
make: *** [file] Errore 1
 
lo script da errore e non continua.
 
Sul man di rm non trovo nulla che faccia al caso mio, mentre su internet 
trovo script per situazioni più specifiche.
 
Ho visto che potrei fare un qualcosa del tipo:
 
cd cartella
rm -f `find . ! -name . -prune -type f`
 
ma non mi piace troppo...
 
Esiste una soluzione più "elegante"?
 
Grazie mille,
-- 
*Willy* - *Contatti*: 
http://snipurl.com/contatti
 
* *FAQ* di /it-alt.comp.software.mozilla/: 
http://www.FAQmozilla.org
 
* *Gratuiki* - Software Free: 
http://gratuiki.willygroup.org
 

 Grazie mille,
 
In *nix non esistono cartelle, ma solo directory.
 
Poi, prova con rm -rf directory/*
 

 tutti i file contenuti in una cartella, quindi utilizzo il comando:
 
 
tutti i file e non le directory?
 
solo nel primo livello o deve essere ricorsivo?
 
 

 solo nel primo livello o deve essere ricorsivo?
 
Solo il primo livello.


 
 
find $path  -maxdepth 1 -type f -exec rm -f {} \;
 

Addi' 09 mag 2012, RedWiz scrive:

Ma scusate nel Makefile tutte queste directory vengono prima create, 
quindi sono ben conosciute, e allora non e' piu' semplice e sicuro 
includere nel makefile stesso il comando di rimuovere ogni file che si 
trova in esse? cioe' qualcosa come:
cd blablabla
rm ./*
cd altra_subdir
rm ./*
.......
......
 
-- 
Tanti saluti
 

 rm ./*
 
Non ho provato, ma penso che dia lo stesso errore nel caso che provi a 
rimuovere una directory.


Addi' 09 mag 2012, Yoda scrive:

Mi son dimenticato un motivo d'interesse anche personale dell'
intervento, mi sai dire per qual buon motivo ci mettono spesso 
l'opzione -f a rm? anche per init c'e' per /tmp all'avvio.
 
-- 
Tanti saluti
 

 rimuovere una directory.
 
Ah finalmente ho capito! ecco perche' nei makefiler c'e' ad esempio:
 
cd blablabla
rm -rf *.o *.ko *~ core* .dep* .*.d .*.cmd *.mod.c *.a *.s .*.flags \
.tmp_versions Module.symvers Modules.symvers Module.markers *.order
 
-- 
Tanti saluti
 

 rm ./*
 
ma hai letto almeno il primo post del thread? (risposta : no)
 

 -f a rm? anche per init c'e' per /tmp all'avvio.
 
 
per non far bloccare rm su richieste di conferma eliminazione file, che 
possono venir fatte per diversi motivi:
 
file protetto da scrittura
un alias nel sistema di rm a "rm -i"
altro

 -exec rm -f {} \;
 
find GNU ha anche -delete

 lo script da errore e non continua.
 
Perché rm restituisce un codice di uscita diverso da zero e make, come 
la polizia dell'immaginario fantozziano, s'incazza.
 
Puoi scegliere di ignorare esplicitamente un caso del genere usando un 
costrutto come
  rm -f cartella/* || :

 trova in esse? 
 
Infatti in ogni MAKEFILE ben fatto c'è un tag :clean che fa proprio
questo. O quasi.
 
PS Non rimuovere ogni file ma rimuovere ogni file che è stato creato
dal make stesso
 
 
 
 

    rm -f cartella/* || :
 
Vediamo se ho capito bene:
esegue il primo comando "rm -f cartella/*" e riceve un codice di errore, 
quindi esegue (in OR || ) il secondo comando ":" che va sempre a buon 
fine e quindi il tutto va sempre a buon fine.


 Ah finalmente ho capito! ecco perche' nei makefiler c'e' ad esempio:
 
Ooh, ci sei quasi arrivato da solo.

 Esiste una soluzione più "elegante"?
 
Infatti è una chiavica
 
find directory -type f -delete  (con  find della GNU)
find directory -type f -exec rm -f {} (con gli altri find)
rm -fr cartella/* (su tutti i sistemi ma non è equivalente)
 
ma già ti hanno risposto
:wq
 

 Vediamo se ho capito bene:
 
Hai capito bene.