find . -name *~ | rm Dove sbaglio?

Se avete problemi con l'installazione e la configurazione di Slackware postate qui. Non usate questo forum per argomenti generali... per quelli usate Gnu/Linux in genere.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware, se l'argomento è generale usate il forum Gnu/Linux in genere.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 657
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

find . -name *~ | rm Dove sbaglio?

Messaggio da darkstaring »

Olaaaa a tutti.. stavo provando ad eliminare tutti i file di backup all'interno della directory dove mi trovavo con

Codice: Seleziona tutto

find . -name *~ | rm
Da qual chè ho capito il pipe serve a mandare l'output del primo comando su quello successivo..
Se è così, perchè non funziona???

il comando
find . -name *~ mi restituisce tutti i file che vorrei eliminare...
Devo aggiunge qualcosa del genere {$1} dopo rm?

E' una cosa importante che vorrei capire bene una volta per tutte :o
Mi potete spiegare?

Grazie Francesco

Avatar utente
Thraphyx
Linux 2.x
Linux 2.x
Messaggi: 212
Iscritto il: ven 28 ago 2009, 22:43
Slackware: 14.1 multilib
Kernel: 3.10.17
Desktop: KDE 4.11.5

Re: find . -name *~ | rm Dove sbaglio?

Messaggio da Thraphyx »

Puoi ottenere quello che vuoi in diversi modi, ad esempio

Codice: Seleziona tutto

find . -iname "*~" -exec rm '{}' \;
Se la tua intenzione era quella di redigire l'output da find a rm, non puoi farlo "direttamente", ma devi ricorrere a xargs

Codice: Seleziona tutto

find . -iname "*~" -print0 | xargs -0 rm 
find e xargs sono comandi molto potenti, un buon passo per iniziare a conoscerli meglio è leggere il manuale :o

Codice: Seleziona tutto

man find
man xargs

Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 657
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Re: find . -name *~ | rm Dove sbaglio?

Messaggio da darkstaring »

Grazie Thraphyx.. queste chicche mi mancavano :)

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: find . -name *~ | rm Dove sbaglio?

Messaggio da 414N »

Aggiungo che è inutile ricorrere ad exec + rm quando si vogliono eliminare i risultati della ricerca: esiste il comando -delete che fa proprio questo:

Codice: Seleziona tutto

find . -iname "*~" -delete

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: find . -name *~ | rm Dove sbaglio?

Messaggio da targzeta »

Occhio ad usare il '-delete'. Ricorda che tutti i comandi per find sono dei filtri in AND (di default) che lui esegue uno dopo l'altro nell'ordine della command line. Cosa voglio dire con questo, che se per sbaglio metti prima il '-delete' e poi il '-iname' ti sei giocato tutti i file.

Esempio:

Codice: Seleziona tutto

cd /tmp
mkdir casa
cd casa
touch {a,b}{1..9}
ls
a1  a2  a3  a4  a5  a6  a7  a8  a9  b1  b2  b3  b4  b5  b6  b7  b8  b9
Ora, se io voglio eliminare tutti i file che iniziano con 'a', correttamente con find:

Codice: Seleziona tutto

find . -name 'a*' -delete
ls
b1  b2  b3  b4  b5  b6  b7  b8  b9
Ricreiamoli:

Codice: Seleziona tutto

touch a{1..9}
ls
a1  a2  a3  a4  a5  a6  a7  a8  a9  b1  b2  b3  b4  b5  b6  b7  b8  b9
se invece per errore metto prima il '-delete':

Codice: Seleziona tutto

find . -delete -name 'a*'
ls
tutti i file eliminati.

Quindi, occhio a quelli che si fa,
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Rispondi