3 581
contributi
m ("do" su una nuova riga (uniformazione alla sintassi usata altrove)) |
(aggiunti esempi e più spiegazioni) |
||
Riga 43: | Riga 43: | ||
{{Box | File | Su Unix e Unix-like per file si può intendere sia un file regolare, ma anche una directory, un link simbolico, una pipe, un socket, un device, ecc... | {{Box | File | Su Unix e Unix-like per file si può intendere sia un file regolare, ma anche una directory, un link simbolico, una pipe, un socket, un device, ecc... | ||
L'espansione di percorso avviene unicamente in base al nome del file, che dev'essere univoco in una cartella, e non al tipo di file. L'unica eccezione sono le directory, perché possono essere identificate anche con lo slash (/) finale.}} | L'espansione di percorso (chiamata anche ''globbing'') avviene unicamente in base al nome del file, che dev'essere univoco in una cartella, e non al tipo di file. L'unica eccezione sono le directory, perché possono essere identificate anche con lo slash (/) finale.}} | ||
Le espansioni di percorso sono possibili solo se i caratteri speciali che la consentono (<code>* ? [ ]</code>) non sono racchiusi tra virgolette, apici o preceduti da <code>/</code>. È sempre consigliabile racchiudere tutto il resto tra virgolette, per non permettere espansioni accidentali. | Le espansioni di percorso sono possibili solo se i caratteri speciali che la consentono (<code>* ? [ ]</code>) non sono racchiusi tra virgolette, apici o preceduti da <code>/</code>. È sempre consigliabile racchiudere tutto il resto tra virgolette, per non permettere espansioni accidentali. | ||
Riga 85: | Riga 85: | ||
L'esistenza di file ottenuti da tali espansioni va pertanto sempre controllata, impiegando l'espansione per generare una lista di stringhe all'interno di un ciclo <code>for</code>, ed effettuando poi il controllo di esistenza su ognuna: | L'esistenza di file ottenuti da tali espansioni va pertanto sempre controllata, impiegando l'espansione per generare una lista di stringhe all'interno di un ciclo <code>for</code>, ed effettuando poi il controllo di esistenza su ognuna: | ||
<pre> | <pre>for file in ./*; do | ||
for file in ./* | |||
do | |||
if [ -e "$file" ]; then | if [ -e "$file" ]; then | ||
... | ... | ||
Riga 133: | Riga 131: | ||
<pre> | <pre> | ||
shopt -s dotglob nullglob | shopt -s dotglob nullglob | ||
for file in ./* | for file in ./*; do | ||
do | |||
... | ... | ||
done | done | ||
Riga 145: | Riga 142: | ||
<pre> | <pre> | ||
for f in ./*.txt | for f in ./*.txt; do | ||
do | |||
if [ -f "$f" ]; then | if [ -f "$f" ]; then | ||
mv -- "$f" "${f%txt}log" | mv -- "$f" "${f%txt}log" | ||
Riga 184: | Riga 180: | ||
Questa espansione è effettuata prima di tutte le altre, e il risultato dell'espansione se non quotato può quindi subire ulteriori espansioni. Per esempio per effettuare un'operazione sui file nella cartella corrente che hanno una data estensione, si può scrivere: | Questa espansione è effettuata prima di tutte le altre, e il risultato dell'espansione se non quotato può quindi subire ulteriori espansioni. Per esempio per effettuare un'operazione sui file nella cartella corrente che hanno una data estensione, si può scrivere: | ||
<pre> | <pre> | ||
for file in ./*.{odt,abw,txt,rtf,doc} | for file in ./*.{odt,abw,txt,rtf,doc}; do | ||
do | |||
if [ -e "$file" ]; then | if [ -e "$file" ]; then | ||
... | ... | ||
Riga 193: | Riga 188: | ||
e la prima riga è equivalente a: | e la prima riga è equivalente a: | ||
<pre> | <pre> | ||
for file in ./*.odt ./*.abw ./*.txt ./*.rtf ./*.doc | for file in ./*.odt ./*.abw ./*.txt ./*.rtf ./*.doc; do | ||
</pre> | </pre> | ||
contributi