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.
darkstaring
Linux 2.4
Linux 2.4
Messaggi: 471
Iscritto il: mer ott 13, 2010 13:55
Desktop: xfce
Distribuzione: Kali Linux

find . -name *~ | rm Dove sbaglio?

Messaggioda darkstaring » sab dic 01, 2012 0:56

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.4
Linux 2.4
Messaggi: 212
Iscritto il: ven ago 28, 2009 22:43
Slackware: 14.1 multilib
Kernel: 3.10.17
Desktop: KDE 4.11.5

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

Messaggioda Thraphyx » sab dic 01, 2012 6:07

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

darkstaring
Linux 2.4
Linux 2.4
Messaggi: 471
Iscritto il: mer ott 13, 2010 13:55
Desktop: xfce
Distribuzione: Kali Linux

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

Messaggioda darkstaring » sab dic 01, 2012 9:20

Grazie Thraphyx.. queste chicche mi mancavano :)

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2893
Iscritto il: mer feb 13, 2008 16:19
Slackware: current
Kernel: 3.14.23
Desktop: KDE4
Località: Bulagna
Contatta:

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

Messaggioda 414N » sab dic 01, 2012 11:29

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: 6362
Iscritto il: gio nov 03, 2005 14:05
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

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

Messaggioda targzeta » sab dic 01, 2012 13:43

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà 


Torna a “Slackware”

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti