[RISOLTO] eliminare i file dell'output di un tree

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
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
Procopio
Linux 3.x
Linux 3.x
Messaggi: 844
Iscritto il: ven 29 lug 2011, 11:50
Nome Cognome: Matteo Micheletto Oddino
Slackware: 14.2
Kernel: 4.4.14
Desktop: Awesome
Località: Torino

[RISOLTO] eliminare i file dell'output di un tree

Messaggio da Procopio »

Ciao a tutti!!

mi rivolgo qua per una domanda che per i più esperti di voi sarà decisamente banale, ma che non so risolvere:

come già spega il titolo, sto cercando di eliminare tutti e soli i file di un output di un tree

Codice: Seleziona tutto

    root@darkstar:/opt/xfce4/exo-0.6.0/tmp# tree -if usr/
    usr
    usr/local
    usr/local/bin
    usr/local/bin/exo-csource
    usr/local/bin/exo-desktop-item-edit
    usr/local/bin/exo-open
    usr/local/bin/exo-preferred-applications
    usr/local/etc
    usr/local/etc/xdg
    usr/local/etc/xdg/xfce4
    usr/local/etc/xdg/xfce4/helpers.rc
    usr/local/include
    usr/local/include/exo-1
    usr/local/include/exo-1/exo
    usr/local/include/exo-1/exo/exo-binding.h
    usr/local/include/exo-1/exo/exo-cell-renderer-ellipsized-text.h
    usr/local/include/exo-1/exo/exo-cell-renderer-icon.h
    usr/local/include/exo-1/exo/exo-config.h
    usr/local/include/exo-1/exo/exo-enum-types.h
    usr/local/include/exo-1/exo/exo-execute.h
    usr/local/include/exo-1/exo/exo-gdk-pixbuf-extensions.h
    usr/local/include/exo-1/exo/exo-gobject-extensions.h
    usr/local/include/exo-1/exo/exo-gtk-extensions.h
    usr/local/include/exo-1/exo/exo-icon-bar.h
    usr/local/include/exo-1/exo/exo-icon-chooser-dialog.h
    usr/local/include/exo-1/exo/exo-icon-view.h
    usr/local/include/exo-1/exo/exo-job.h
    usr/local/include/exo-1/exo/exo-simple-job.h
    usr/local/include/exo-1/exo/exo-string.h
    usr/local/include/exo-1/exo/exo-toolbars-editor-dialog.h
    usr/local/include/exo-1/exo/exo-toolbars-editor.h
    ...ecc ecc
spiego meglio il problema: ho installato xfce4.8 senza pacchettizzare, e ora per rimuoverlo non posso dare un make unistall ma devo eliminare tutti i files a mano, dal momento che la sola individuazione dei file non è facile, ho installato ogni pacchetto precompilato di xfce in una directory creata ad hoc, "tmp", nella directory del pacchetto stesso precompilato, così che da lì dentro riesco ad individuare il percorso di ogni singolo file e a eliminarlo:) se notate ad ogni singolo percorso però manca la slash di root.

Di questi elenchi da 220 linee e anche molte di più, ne ho diversi, uno per ogni pacchetto di xfce (una ventina circa) e vorrei aggiungere un "rm /" davanti ad ogni riga per andare a eliminare i file (meglio ancora sarebbe ottenere come output del tree soli files, ma ho provato con il comando tree -if -I */ in maniera che filtrasse le directories e non ci è riuscito)

un programma che avevo provato a scrivere io era questo

Codice: Seleziona tutto

#!/bin/sh
for file 
usr
usr/local
usr/local/bin
usr/local/bin/exo-csource
usr/local/bin/exo-desktop-item-edit
usr/local/bin/exo-open
usr/local/bin/exo-preferred-applications
usr/local/etc
usr/local/etc/xdg
usr/local/etc/xdg/xfce4
usr/local/etc/xdg/xfce4/helpers.rc
usr/local/include
usr/local/include/exo-1
usr/local/include/exo-1/exo
usr/local/include/exo-1/exo/exo-binding.h
usr/local/include/exo-1/exo/exo-cell-renderer-ellipsized-text.h
usr/local/include/exo-1/exo/exo-cell-renderer-icon.h
...
usr/local/share/xfce4/helpers/thunderbird.desktop
usr/local/share/xfce4/helpers/urxvt.desktop
usr/local/share/xfce4/helpers/w3m.desktop
usr/local/share/xfce4/helpers/xterm.desktop ; do
 ( rm $/file )
ma ovviamente è sbagliato :)se mi poteste dare una dritta ve ne sarei molto grato :)
Ultima modifica di Procopio il mer 9 nov 2011, 20:31, modificato 1 volta in totale.

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: eliminare i file dell'output di un tree

Messaggio da 414N »

Il problema consiste nel rimuovere una directory e tutte le sue sottodirectory?
Se sì

Codice: Seleziona tutto

rm -r directory
Col flag -r, rm rimuove la directory indicata e tutti i suoi contenuti ricorsivamente.

Avatar utente
masalapianta
Iper Master
Iper Master
Messaggi: 2775
Iscritto il: lun 25 lug 2005, 0:00
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian
Località: Roma
Contatta:

Re: eliminare i file dell'output di un tree

Messaggio da masalapianta »

non conosco tree ma non va bene lo stesso find?
find /percorso -type f -exec rm {} \;
elimina ogni file (come hai chiesto, non le directory) nel percorso specificato

Avatar utente
Procopio
Linux 3.x
Linux 3.x
Messaggi: 844
Iscritto il: ven 29 lug 2011, 11:50
Nome Cognome: Matteo Micheletto Oddino
Slackware: 14.2
Kernel: 4.4.14
Desktop: Awesome
Località: Torino

Re: eliminare i file dell'output di un tree

Messaggio da Procopio »

@414N: eh no, il problema è esattamente l'inverso: io voglio rimuovere solo i files di xfce, ma il tree ovviamente oltre ai files mi da in output anche le directory! se tu all'elenco di files che c'è sopra metti davanti ad ogni riga una / ottieni il filesistem del mio sistema con tutti i files di xfce all'interno che io voglio eliminare!

@masalapianta: quello sembrerebbe andar bene, ma devo farlo su un elenco, non su un singolo file, quindi posso sostituire a "persorso" l'elenco completo?

Codice: Seleziona tutto

 find /
    usr/local/bin/exo-csource
    usr/local/bin/exo-desktop-item-edit
    usr/local/bin/exo-open
    usr/local/bin/exo-preferred-applications
    usr/local/etc
    usr/local/etc/xdg
    usr/local/etc/xdg/xfce4
    usr/local/etc/xdg/xfce4/helpers.rc
    usr/local/include
    usr/local/include/exo-1
    usr/local/include/exo-1/exo
    usr/local/include/exo-1/exo/exo-binding.h
    usr/local/include/exo-1/exo/exo-cell-renderer-ellipsized-text.h
    usr/local/include/exo-1/exo/exo-cell-renderer-icon.h
    usr/local/include/exo-1/exo/exo-config.h
    usr/local/include/exo-1/exo/exo-enum-types.h
    usr/local/include/exo-1/exo/exo-execute.h
    usr/local/include/exo-1/exo/exo-gdk-pixbuf-extensions.h -type f -exec rm {} \;
cioè definire magari percorso come un elenco (si dice array? :))

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: eliminare i file dell'output di un tree

Messaggio da targzeta »

Cioé tu vuoi eliminare tutti i file ma lasciare l'abero delle directory intatto, giusto? Il consiglio di masalapianta è corretto, "percorso" è UN percorso, find esegue una ricerca ricorsiva, quindi non hai nessun bisogno di passargli tutti quei path. Prova semplicemente il comando:

Codice: Seleziona tutto

find /usr/local -type f
e vedi cosa ti da in output, se ti tira fuori tutti e soli i file che vuoi cancellare, allora dai:

Codice: Seleziona tutto

find /usr/local -type f | xargs rm
che li cancella tutti. Occhio però perché, così a prima vista, mi sembra che ci siano anche un po' di sottodirectory che dovresti eliminare. Vedi ad esempio usr/local/etc/xdg.

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
Procopio
Linux 3.x
Linux 3.x
Messaggi: 844
Iscritto il: ven 29 lug 2011, 11:50
Nome Cognome: Matteo Micheletto Oddino
Slackware: 14.2
Kernel: 4.4.14
Desktop: Awesome
Località: Torino

Re: eliminare i file dell'output di un tree

Messaggio da Procopio »

eheh no, ci siamo quasi ma non è così.....io il find lo faccio in /opt/xfce4/pacchetto/tmp/usr, qui c'è una copia del mio filesistem ma con i soli pacchetti di xfce
io voglio cancellare dal mio filesistem i pacchetti che mi vengono suggeriti in quel filesistem copia!

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: eliminare i file dell'output di un tree

Messaggio da targzeta »

Quindi devi fare il find sul filesystem copia ma eliminare i file dal tuo filesystem originale? In pratica, per ogni file tirato fuori da find, devi eliminare il relativo file però senza il '/opt/xfce4/pacchetto/tmp' davanti? Oppure ci devi mettere /usr/local/? Fai un esempio pratico, posta il percorso del file da tuo filesystem copia e poi mostraci il relativo file dal tuo filesystem originale.

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

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: eliminare i file dell'output di un tree

Messaggio da 414N »

Cioè sfruttare l'elenco in /opt per cancellare quelli che hai installato erroneamente nel filesystem?
Fai una prova: entra nella directory contenente la directory usr (da quel che hai riportato, dovrebbe essere /opt/xfce4/pacchetto/tmp/).
Esegui il seguente comando:

Codice: Seleziona tutto

find usr -type f -exec echo /{} \;
Se vedi stampati tutti e soli i file che dovresti cancellare (col path corretto con uno slash iniziale tramite la echo), allora sostituisci la echo con un rm:

Codice: Seleziona tutto

find usr -type f -exec rm /{} \;
Ovviamente dovrai essere root perché il secondo comando sortisca l'effetto voluto.

hashbang
Packager
Packager
Messaggi: 2021
Iscritto il: ven 4 giu 2010, 10:27
Nome Cognome: Luca De Pandis
Distribuzione: macOS/OpenBSD
Località: Lecce/Bergamo

Re: eliminare i file dell'output di un tree

Messaggio da hashbang »

Ma scusami eh...(senza polemica).
Conoscendo già il problema (visto che ne abbiamo discusso nell'altro topic) rispondo subito: non avresti fatto prima a pacchettizzare i binari installati nel file system fittizio (ovvero quella dir tmp), installare i pacchetti creati e rimuovere il tutto?
Tanto i path dei binari e delle librerie sparse per il sistema sono identici a quelli presenti nell'FS fittizio (visto che hai usato gli stessi sorgenti con la stessa configurazione). Una volta installato quei pacchetti avresti sovrascritto i file già presenti e li avresti rimossi agevolmente con removepkg.

A quest'ora avresti già finito. :roll:

Poi se vuoi usare questo metodo per scopi di apprendimento è un altro conto, ma IMHO è solo una perdita di tempo inutile.

Avatar utente
Procopio
Linux 3.x
Linux 3.x
Messaggi: 844
Iscritto il: ven 29 lug 2011, 11:50
Nome Cognome: Matteo Micheletto Oddino
Slackware: 14.2
Kernel: 4.4.14
Desktop: Awesome
Località: Torino

Re: eliminare i file dell'output di un tree

Messaggio da Procopio »

spina ha scritto:Quindi devi fare il find sul filesystem copia ma eliminare i file dal tuo filesystem originale? In pratica, per ogni file tirato fuori da find, devi eliminare il relativo file però senza il '/opt/xfce4/pacchetto/tmp' davanti?
esattamente :thumbright:

414N ha scritto:Cioè sfruttare l'elenco in /opt per cancellare quelli che hai installato erroneamente nel filesystem?
Fai una prova: entra nella directory contenente la directory usr (da quel che hai riportato, dovrebbe essere /opt/xfce4/pacchetto/tmp/).
Esegui il seguente comando:

Codice: Seleziona tutto

find usr -type f -exec echo /{} \;
perfetto, questo comando funziona alla perfezione, mi ha restituito tutti e soli i files che devo cancellare, e lo fà in maniera corretta! perchè se anche in realtà mi sta facendo vedere i files di /opt/xfce4/exo-0.6.0/tmp/usr/local/etc/xdg/xfce4/helpers.rc ha eliminato in out la prima parte del percorso /opt/xfce4/exo-0.6.0/tmp lasciando solo i files del filesystem che voglio eliminare!!!

Codice: Seleziona tutto

root@darkstar:/opt/xfce4/exo-0.6.0/tmp# find usr -type f -exec echo /{} \;
/usr/local/etc/xdg/xfce4/helpers.rc
/usr/local/share/man/man1/exo-csource.1
/usr/local/share/man/man1/exo-open.1
/usr/local/share/pygtk/2.0/defs/exo-0.6/exo.defs
/usr/local/share/pixmaps/exo-1/exo-thumbnail-frame.png
/usr/local/share/gtk-doc/html/exo-1/ch01.html
/usr/local/share/gtk-doc/html/exo-1/right.png
/usr/local/share/gtk-doc/html/exo-1/exo-widgets.html
/usr/local/share/gtk-doc/html/exo-1/ExoToolbarsView.html
/usr/local/share/gtk-doc/html/exo-1/ExoIconBar.html
...
quindi è perfetto! se poi sostituisco a echo rm me li rimuove! ...e per quanto riguarda questo thread posso mettere risolto! :thumbright:

atomix600 ha scritto:non avresti fatto prima a pacchettizzare i binari installati nel file system fittizio (ovvero quella dir tmp), installare i pacchetti creati e rimuovere il tutto?
Tanto i path dei binari e delle librerie sparse per il sistema sono identici a quelli presenti nell'FS fittizio (visto che hai usato gli stessi sorgenti con la stessa configurazione). Una volta installato quei pacchetti avresti sovrascritto i file già presenti e li avresti rimossi agevolmente con removepkg.
ehehe e qui arriva il punto dolente, perchè a questo punto posso eliminare tutto quanto, ma quale dei due metodi è più corretto, cioè più pulito? pacchettizzando e poi rimuovendo o eliminando ogni file con rm tramite il comando suggerito da 414N? tieni comunque conto che due di quei pacchetti non sono riuscito a installarli nel filesystem fittizzio, ma di questo è meglio parlarne nell'altro topic, quindi riporto queste due battute di là! ;)

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: [RISOLTO] eliminare i file dell'output di un tree

Messaggio da targzeta »

Meglio installare i pacchetti e poi rimuoverli. Come ti dicevo prima, eliminando solo i file ti rimangono delle directory orfane. Mentre un pacchetto, quando lo rimuovi, rimuove tutto ciò che ha installato (file di configurazione a parte, ovviamente). Quando rimuovi il pacchetto fai solo attenzione se l'output di removepkg ti riporta qualche WARNING o qualche riga con 'not found ... skipped'

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
Procopio
Linux 3.x
Linux 3.x
Messaggi: 844
Iscritto il: ven 29 lug 2011, 11:50
Nome Cognome: Matteo Micheletto Oddino
Slackware: 14.2
Kernel: 4.4.14
Desktop: Awesome
Località: Torino

Re: [RISOLTO] eliminare i file dell'output di un tree

Messaggio da Procopio »

ok, grazie mille spina! ;)

Rispondi