Zsh
mv Foo/*(DN) Bar/
lub
setopt -s glob_dots
mv Foo/*(N) Bar/
(Pomiń, (N)
jeśli wiesz, że katalog nie jest pusty).
Grzmotnąć
shopt -s dotglob nullglob
mv Foo/* Bar/
Ksh93
Jeśli wiesz, że katalog nie jest pusty:
FIGNORE='.?(.)'
mv Foo/* Bar/
Standardowy (POSIX) sh
for x in Foo/* Foo/.[!.]* Foo/..?*; do
if [ -e "$x" ]; then mv -- "$x" Bar/; fi
done
Jeśli chcesz, aby mv
polecenie zwróciło status błędu, nawet jeśli się powiodło, jest to o wiele prostsze:
mv Foo/* Foo/.[!.]* Foo/..?* Bar/
GNU find i GNU mv
find Foo/ -mindepth 1 -maxdepth 1 -exec mv -t Bar/ -- {} +
Znalezienie standardowe
Jeśli nie przeszkadza ci przejście do katalogu źródłowego:
cd Foo/ &&
find . -name . -o -exec sh -c 'mv -- "$@" "$0"' ../Bar/ {} + -type d -prune
Oto więcej szczegółów na temat kontrolowania, czy pliki kropek są dopasowane w bash, ksh93 i zsh.
Grzmotnąć
Ustaw dotglob
opcję .
$ echo *
none zero
$ shopt -s dotglob
$ echo *
..two .one none zero
Istnieje również bardziej elastyczna GLOBIGNORE
zmienna , którą można ustawić na listę wzorców symboli wieloznacznych oddzielonych dwukropkami, które mają być ignorowane. Jeśli nie jest ustawiony (ustawienie domyślne), powłoka zachowuje się tak, jakby wartość była pusta, jeśli dotglob
jest ustawiona, i tak, jakby wartość była, .*
jeśli opcja była nieaktywna. Zobacz Rozszerzenie nazwy pliku w instrukcji. Wszechobecna katalogów .
i ..
zawsze są pominięte, chyba że .
jest dopasowany dosłownie przez wzorzec.
$ GLOBIGNORE='n*'
$ echo *
..two .one zero
$ echo .*
..two .one
$ unset GLOBIGNORE
$ echo .*
. .. ..two .one
$ GLOBIGNORE=.:..
$ echo .*
..two .one
Ksh93
Ustaw FIGNORE
zmienną . Jeśli nieustawione (ustawienie domyślne), powłoka zachowuje się tak, jakby była to wartość .*
. Aby zignorować .
i ..
, należy je jednoznacznie dopasować (instrukcja w ksh 93s + 2008-01-31 stwierdza, że .
i ..
zawsze są ignorowane, ale nie opisuje to poprawnie faktycznego zachowania).
$ echo *
none zero
$ FIGNORE='@(.|..)'
$ echo *
..two .one none zero
$ FIGNORE='n*'
$ echo *
. .. ..two .one zero
Możesz dodać pliki kropek do wzorca , dopasowując je jawnie.
$ unset FIGNORE
$ echo @(*|.[^.]*|..?*)
..two .one none zero
Aby rozszerzenie było puste, jeśli katalog jest pusty, użyj N
opcji dopasowania wzorca: ~(N)@(*|.[^.]*|..?*)
lub ~(N:*|.[^.]*|..?*)
.
Zsh
Ustaw dot_glob
opcję .
% echo *
none zero
% setopt dot_glob
% echo *
..two .one none zero
.
i ..
nigdy nie są dopasowywane, nawet jeśli wzorzec .
wyraźnie pasuje do wiodącego .
% echo .*
..two .one
Możesz dołączyć pliki kropek według określonego wzorca z D
kwalifikatorem glob .
% echo *(D)
..two .one none zero
Dodaj N
kwalifikator glob aby ekspansję wyjdzie pusty w pustym katalogu: *(DN)
.
Uwaga: można uzyskać nazwy pliku wyników dylatacyjnych w różnych zleceń (np none
następnie .one
następuje ..two
) w oparciu o ustawieniach tych LC_COLLATE
, LC_ALL
oraz LANG
zmiennych.