Come faccio a eliminare tutti i file da un albero di directory in cui il nome del file contiene caratteri speciali come öäüß

2

Ho un problema con il mio programma di backup, il che significa che ho bisogno di cancellare tutti i file e le cartelle in un albero di directory specifico dove il nome del file contiene caratteri speciali, nel mio caso quelli tedeschi come öäüß e i loro equivalenti di capitale.

Sarei abbastanza felice di farlo usando il terminale ma nessuno dei comandi che ho provato ha abbinato nessuno dei file. Qualcuno può suggerire un comando che potrei usare che potrebbe corrispondere a questi file?

Ad esempio, ho provato

find -name *ü*

tuttavia nessuno dei file è abbinato. Qualsiasi aiuto sarebbe apprezzato.

    
posta Ham 13.02.2012 - 23:47
fonte

3 risposte

1

Una soluzione un po 'pericolosa è questa, dalla riga di comando:

find . -type f ! -regex '.*/[ -.0-~]*' -exec rm {} +

Sostituisci il solitario . con il nome della directory superiore se non hai prima cambiato la directory pertinente. Per sicurezza, provate prima il comando più breve

find . -type f ! -regex '.*/[ -.0-~]*'

e assicurati che elenchi solo i file che desideri eliminare. L'espressione regolare (regexp o regex) qui corrisponde a qualsiasi percorso che termina in una barra seguita da qualsiasi combinazione di caratteri ASCII stampabili, ad eccezione di / , i caratteri dello spazio sono il primo e ~ l'ultimo, mentre . e 0 surround / nella sequenza ASCII.

Un avvertimento tra molti: non so con certezza se la tua corrente impostazione locale possa cambiare la sequenza di caratteri in ordine, e quindi forse cambiare il significato della regexp. Non penso che lo faccia, ma se lo fa, eseguendo i comandi come

LC_COLLATE=C find …

dovrebbe rimuovere il pericolo.

Ancora un altro avvertimento: assicurati di avere un backup prima di provare questo. Non prenderò la colpa per alcuna perdita di dati se ti sbagli. La linea di comando è un ottimo strumento per spararti ai piedi! A volte solo uno spazio fuori posto può significare disastri. (In questo caso, ad esempio, manca lo spazio singolo dopo che la parentesi sinistra è mortale.)

    
risposta data 14.02.2012 - 21:35
fonte
1

Sembra che il tuo problema sia legato alla differenza di visualizzazione dei caratteri sia nel terminale che nel Finder. Suggerirei di andare nella directory in cui si trova uno qualsiasi dei file che si desidera rimuovere ed emettere un ls per trovare se il nome file nell'ambiente UNIX corrisponde a quello del Finder.

Trovo che la soluzione sopra suggerita sia un po 'confusa. Quindi la mia versione del comando find richiede due passaggi:

find . -name "*ü*" -print
Questo stamperebbe i file che corrispondono.

find . -name "*ü*" -delete
Ciò eliminerebbe i file che corrispondono dopo aver verificato che nessuno dei file necessari sia elencato nella stampa precedente.

Dovresti anche prendere in considerazione le varie impostazioni dell'ambiente LC_ * che sono coinvolte qui, come per @Harald Hanche-Olsen, e che tipo di effetto ha il comando find . Per non parlare delle impostazioni di codifica del display del terminale.

    
risposta data 15.02.2012 - 05:33
fonte
0

Puoi provare in un altro modo usando "Un rinomato Finder migliore" ( Link ). Ha il vantaggio di un riquadro di anteprima, preimpostazioni e azioni multi-passo. Puoi usare la prova gratuita per sperimentare.

    
risposta data 15.02.2012 - 10:01
fonte

Leggi altre domande sui tag