zsh
mv Foo/*(DN) Bar/
o
setopt -s glob_dots
mv Foo/*(N) Bar/
(Lasciare fuori (N)
se si sa che la directory non è vuota.)
bash
shopt -s dotglob nullglob
mv Foo/* Bar/
ksh93
Se sai che la directory non è vuota:
FIGNORE='.?(.)'
mv Foo/* Bar/
Standard (POSIX) sh
for x in Foo/* Foo/.[!.]* Foo/..?*; do
if [ -e "$x" ]; then mv -- "$x" Bar/; fi
done
Se sei disposto a lasciare che il mv
comando restituisca uno stato di errore anche se è riuscito, è molto più semplice:
mv Foo/* Foo/.[!.]* Foo/..?* Bar/
GNU find e GNU mv
find Foo/ -mindepth 1 -maxdepth 1 -exec mv -t Bar/ -- {} +
Trova standard
Se non ti dispiace cambiare nella directory di origine:
cd Foo/ &&
find . -name . -o -exec sh -c 'mv -- "$@" "$0"' ../Bar/ {} + -type d -prune
Ecco ulteriori dettagli sul controllo della corrispondenza dei file dot in bash, ksh93 e zsh.
bash
Imposta l' dotglob
opzione .
$ echo *
none zero
$ shopt -s dotglob
$ echo *
..two .one none zero
C'è anche la GLOBIGNORE
variabile più flessibile , che è possibile impostare su un elenco separato da due punti di motivi jolly da ignorare. Se non impostato (impostazione predefinita), la shell si comporta come se il valore fosse vuoto se dotglob
impostato, e come se il valore fosse .*
se l'opzione non è impostata. Vedere Espansione nome file nel manuale. Le directory pervasive .
e ..
sono sempre omesse, a meno che non .
sia abbinato esplicitamente al modello.
$ GLOBIGNORE='n*'
$ echo *
..two .one zero
$ echo .*
..two .one
$ unset GLOBIGNORE
$ echo .*
. .. ..two .one
$ GLOBIGNORE=.:..
$ echo .*
..two .one
ksh93
Imposta la FIGNORE
variabile . Se non impostato (impostazione predefinita), la shell si comporta come se il valore fosse .*
. Per ignorarli .
e ..
, devono essere abbinati esplicitamente (il manuale in ksh 93s + 2008-01-31 afferma che .
e ..
sono sempre ignorati, ma questo non descrive correttamente il comportamento reale).
$ echo *
none zero
$ FIGNORE='@(.|..)'
$ echo *
..two .one none zero
$ FIGNORE='n*'
$ echo *
. .. ..two .one zero
È possibile includere file di punti in un modello abbinandoli esplicitamente.
$ unset FIGNORE
$ echo @(*|.[^.]*|..?*)
..two .one none zero
Per fare in modo che l'espansione risulti vuota se la directory è vuota, utilizzare l' N
opzione di corrispondenza del modello: ~(N)@(*|.[^.]*|..?*)
o ~(N:*|.[^.]*|..?*)
.
zsh
Imposta l' dot_glob
opzione .
% echo *
none zero
% setopt dot_glob
% echo *
..two .one none zero
.
e ..
non vengono mai abbinati, anche se lo schema corrisponde .
esplicitamente al comando iniziale.
% echo .*
..two .one
È possibile includere file dot in uno schema specifico con il D
qualificatore glob .
% echo *(D)
..two .one none zero
Aggiungere il N
qualificatore glob per rendere l'espansione uscirà vuota in una directory vuota: *(DN)
.
Nota: è possibile ottenere risultati espansione dei nomi in ordine diverso (ad esempio, none
seguita da .one
seguita da ..two
) in base alle impostazioni dei LC_COLLATE
, LC_ALL
e LANG
le variabili.