Zsh
mv Foo/*(DN) Bar/
oder
setopt -s glob_dots
mv Foo/*(N) Bar/
(Lassen Sie das weg, (N)
wenn Sie wissen, dass das Verzeichnis nicht leer ist.)
Bash
shopt -s dotglob nullglob
mv Foo/* Bar/
Ksh93
Wenn Sie wissen, dass das Verzeichnis nicht leer ist:
FIGNORE='.?(.)'
mv Foo/* Bar/
Standard (POSIX) sh
for x in Foo/* Foo/.[!.]* Foo/..?*; do
if [ -e "$x" ]; then mv -- "$x" Bar/; fi
done
Wenn Sie möchten, dass der mv
Befehl trotz Erfolg einen Fehlerstatus zurückgibt, ist dies viel einfacher:
mv Foo/* Foo/.[!.]* Foo/..?* Bar/
GNU find und GNU mv
find Foo/ -mindepth 1 -maxdepth 1 -exec mv -t Bar/ -- {} +
Standard finden
Wenn es Ihnen nichts ausmacht, in das Quellverzeichnis zu wechseln:
cd Foo/ &&
find . -name . -o -exec sh -c 'mv -- "$@" "$0"' ../Bar/ {} + -type d -prune
Im Folgenden erfahren Sie, wie Sie steuern, ob Punktdateien in bash, ksh93 und zsh abgeglichen werden.
Bash
Stellen Sie die dotglob
Option ein .
$ echo *
none zero
$ shopt -s dotglob
$ echo *
..two .one none zero
Es gibt auch die flexiblere GLOBIGNORE
Variable , die Sie auf eine durch Doppelpunkte getrennte Liste von Platzhaltern setzen können, die ignoriert werden sollen. Wenn nicht gesetzt (Standardeinstellung), verhält sich die Shell so, als ob der Wert leer wäre dotglob
, wenn gesetzt, und als ob der Wert leer wäre , .*
wenn die Option nicht gesetzt ist. Siehe Dateinamenerweiterung im Handbuch. Die allgegenwärtigen Verzeichnisse .
und ..
werden immer weggelassen, es sei denn, .
das Muster stimmt ausdrücklich mit dem überein.
$ GLOBIGNORE='n*'
$ echo *
..two .one zero
$ echo .*
..two .one
$ unset GLOBIGNORE
$ echo .*
. .. ..two .one
$ GLOBIGNORE=.:..
$ echo .*
..two .one
Ksh93
Stellen Sie die FIGNORE
Variable ein . Wenn nicht festgelegt (Standardeinstellung), verhält sich die Shell so, als wäre der Wert .*
. Um .
und zu ignorieren ..
, müssen sie explizit übereinstimmen (das Handbuch in ksh 93s + 2008-01-31 besagt, dass .
und ..
immer ignoriert werden, aber dies beschreibt das tatsächliche Verhalten nicht korrekt).
$ echo *
none zero
$ FIGNORE='@(.|..)'
$ echo *
..two .one none zero
$ FIGNORE='n*'
$ echo *
. .. ..two .one zero
Sie können Punktedateien in ein Muster aufnehmen, indem Sie sie explizit abgleichen.
$ unset FIGNORE
$ echo @(*|.[^.]*|..?*)
..two .one none zero
Wenn die Erweiterung leer sein soll, wenn das Verzeichnis leer ist, verwenden Sie die N
Mustervergleichsoption: ~(N)@(*|.[^.]*|..?*)
oder ~(N:*|.[^.]*|..?*)
.
Zsh
Stellen Sie die dot_glob
Option ein .
% echo *
none zero
% setopt dot_glob
% echo *
..two .one none zero
.
und ..
werden nie abgeglichen, auch wenn das Muster .
explizit mit dem führenden übereinstimmt .
% echo .*
..two .one
Sie können Punktdateien in ein bestimmtes Muster mit dem D
Glob-Qualifikationsmerkmal aufnehmen .
% echo *(D)
..two .one none zero
Fügen Sie die N
glob Qualifier die Erweiterung kommen leer in ein leeres Verzeichnis zu machen: *(DN)
.
Hinweis: Sie können Dateinamen Expansion führen zu unterschiedlichen Aufträgen erhalten (zB none
gefolgt von .one
gefolgt von ..two
) auf der Grundlage Ihrer Einstellungen der LC_COLLATE
, LC_ALL
und LANG
Variablen.