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: