[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Una info su Bash.



Il 10/11/2014 19:52, Tiziano ha scritto:
In una directory ho dei pdf che contengono spazi, per mia comodità
voglio fare uno script che mi crei una directory per ognuno di essi
ma...

find -maxdepth 1  -name '*.pdf'  -exec basename {} .pdf \;

elenca i file senza estensione come dev'essere,

find -maxdepth 1  -name '*.pdf'  -exec mkdir `basename {} .pdf` \;
find -maxdepth 1  -name '*.pdf'  -exec mkdir $(basename {} .pdf) \;

restituiscono i nomi file completi, con l'estensione.

Dove sbaglio?

In tutta sincerità, non lo so. Suppongo che accada che la shell interpreti le virgolette rovesciate e la $() PRIMA di passarle a find.

Però posso dirti cosa farei io:

$ IFS=$'\n'
$ for i in `find -maxdepth 1 -name '*.pdf' `; do mkdir `basename "$i" .pdf`; done
$ unset IFS

Nella prima riga dico alla shell che il separatore predefinito è il newline e NON gli spazi.

Nella seconda eseguo un ciclo su tutti i file trovati da find (essendo il separatore il carattere newline, ad ogni iterazione la variabile $i conterrà il nome di un file trovato, a prescindere dagli spazi nel nome. Successivamente, ad ogni iterazione, creo la directory, usando basename come hai fatto tu prima, ma stavolta in un comando normale, e non in un comando da passare a find. Le virgolette doppie servono per preservare gli spazi nei nomi dei file (con gli apici ' non funziona!).

Infine rimuovo il separatore predefinito che ho impostato, così da ripristinare il separatore predefinito della shell.

Per ora ho le mani su un sistema Ubuntu 14.04, e funziona. Sono certo che funzionerà anche su Debian.

buon divertimento con la shell,
gerlos

--
"Life is pretty simple: You do some stuff. Most fails. Some works. You do more
of what works. If it works big, others quickly copy it. Then you do something
else. The trick is the doing something else."
           < http://gerlos.altervista.org >
 gerlos  +- - - >  gnu/linux registred user #311588


Reply to: