Pagina 1 di 1

Script Find and Delete file [RISOLTO]

Inviato: lun 23 giu 2008, 10:12
da Unicondor
Salve ragazzi, vi espongo il mio problema...
Ho una directory con molte sottodirecotry..ed in qualche di queste sottodirectory ci sono dei file .class che voglio eliminare (è un workspace Java)

Vorrei scrivere uno script (bash-python) che mi cercasse tutti i file .class in tutte le directory e sotto directory di una data radice e me le cancellasse in automatico..

Ho trovato qualcosa del genere girovagando sul web pero' mi elimina i file solo specificando ogni volta la directory

Codice: Seleziona tutto

#!/bin/bash

find /path/arch -iname *.class  -exec rm {} \;
Vi ringrazio in anticipo...

Re: Script Find and Delete file

Inviato: lun 23 giu 2008, 11:50
da 414N
Devi proteggere l'asterisco (*) dalla "shell expansion" tramite gli apici singoli (' '), in questo modo:

Codice: Seleziona tutto

find /path/arch -iname '*.class'  -exec rm {} \;
Ho provato il comando nel mio workspace di Eclipse mettendo al posto di rm una echo e mi stampa tutti i file .class contenuti nell'albero delle subdirectories di ~/workspace.

Re: Script Find and Delete file

Inviato: lun 23 giu 2008, 11:51
da tigerwalk
Credo debba essere aggiunta una opzione al comando find (man find) ma non sono esperto in script....

Re: Script Find and Delete file

Inviato: lun 23 giu 2008, 12:11
da conraid
Senza fare script bash (è un comando solo perché metterlo in uno script?) prova a lanciare da linea di comando

Codice: Seleziona tutto

$ find . -iname "*.class" 
E vedrai che ti lista tutti i class partendo dalla directory di dove hai lanciato lo script

Quindi ti posizioni nella directory dove hai molte sottodir e lanci

Codice: Seleziona tutto

$ find . -iname "*.class"  -exec rm {} \;
Attento ad essere nella dir giusta, altrimenti ti cancella di class di altre directory

Re: Script Find and Delete file

Inviato: mer 25 giu 2008, 14:55
da Unicondor
Grazie a tutti..il problema erano proprio gli apici da inserire all'interno del codice per questo non voleva funzionare...
Grazie ancora..

Re: Script Find and Delete file [RISOLTO]

Inviato: mer 25 giu 2008, 15:13
da anycolouryoulike
Con la Bash funziona anche senza apici veramente.
Per caso usi Zsh?

Re: Script Find and Delete file [RISOLTO]

Inviato: mer 25 giu 2008, 15:26
da conraid
anycolouryoulike ha scritto:Con la Bash funziona anche senza apici veramente.
Per caso usi Zsh?
In quel caso forse sì, ma hanno comportamenti diversi se usati con o senza virgolette.
Per esempio

Codice: Seleziona tutto

$ ls
pippo.txt  ppluto.txt
$ find . -name pippo
$ find . -name pippo*
./pippo.txt
a$ find . -name "pippo*"
./pippo.txt
$ find . -name "*txt"
./ppluto.txt
./pippo.txt
$ find . -name *txt
find: i percorsi devono precedere l'espressione
Uso: find [-H] [-L] [-P] [percorso...] [espressione]

Tanto che nel man consigliano

Codice: Seleziona tutto

Don't forget to enclose the pattern in quotes in order to protect it from expansion by the shell.

Re: Script Find and Delete file [RISOLTO]

Inviato: mer 25 giu 2008, 21:09
da anycolouryoulike
Vero, perché sono nella directory corrente e Bash espande la variabile, mentra Zsh no:

Codice: Seleziona tutto

root@darkstar:~$ ls
loadlin16c.txt  loadlin16c.zip
root@darkstar:~$ PROVA=*.txt
root@darkstar:~$ echo $PROVA
*.txt
root@darkstar:~$ bash
root@darkstar:~# PROVA=*.txt
root@darkstar:~# echo $PROVA
loadlin16c.txt
In questo modo find non riesce a distinguere il percorso dall'espressione!