Repository 32bit  Forum
Repository 64bit  Wiki

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.

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
darkstaring
Linux 2.4
Linux 2.4
 
Messaggi: 363
Iscritto il: mer ott 13, 2010 12:55
Slackware: Current
Desktop: xfce

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

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

Messaggioda darkstaring » sab dic 01, 2012 9:20

Grazie Thraphyx.. queste chicche mi mancavano :)
darkstaring
Linux 2.4
Linux 2.4
 
Messaggi: 363
Iscritto il: mer ott 13, 2010 12:55
Slackware: Current
Desktop: xfce

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
414N
Iper Master
Iper Master
 
Messaggi: 2877
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

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


Torna a Slackware

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti