Zsh
mv Foo/*(DN) Bar/
или же
setopt -s glob_dots
mv Foo/*(N) Bar/
(Не указывайте, (N)если каталог не пуст.)
удар
shopt -s dotglob nullglob
mv Foo/* Bar/
ksh93
Если вы знаете, что каталог не пуст:
FIGNORE='.?(.)'
mv Foo/* Bar/
Стандарт (POSIX) ш
for x in Foo/* Foo/.[!.]* Foo/..?*; do
if [ -e "$x" ]; then mv -- "$x" Bar/; fi
done
Если вы хотите, чтобы mvкоманда возвращала статус ошибки, даже если она прошла успешно, это намного проще:
mv Foo/* Foo/.[!.]* Foo/..?* Bar/
GNU найти и GNU MV
find Foo/ -mindepth 1 -maxdepth 1 -exec mv -t Bar/ -- {} +
Стандартная находка
Если вы не возражаете перейти на исходный каталог:
cd Foo/ &&
find . -name . -o -exec sh -c 'mv -- "$@" "$0"' ../Bar/ {} + -type d -prune
Вот более подробно о контроле соответствия файлов точек в bash, ksh93 и zsh.
удар
Установите dotglobопцию .
$ echo *
none zero
$ shopt -s dotglob
$ echo *
..two .one none zero
Существует также более гибкая GLOBIGNOREпеременная , которую вы можете установить в список символов подстановки, разделенных двоеточиями, чтобы игнорировать их. Если не установлено (настройка по умолчанию), оболочка ведет себя так, как если бы значение было пустым, если dotglobустановлено, и как если бы значение было, .*если опция не установлена. См. Расширение имени файла в руководстве. Повсеместная каталоги .и ..всегда опущена, если .не будет сопоставляться явно с шаблоном.
$ GLOBIGNORE='n*'
$ echo *
..two .one zero
$ echo .*
..two .one
$ unset GLOBIGNORE
$ echo .*
. .. ..two .one
$ GLOBIGNORE=.:..
$ echo .*
..two .one
ksh93
Установите FIGNOREпеременную . Если не установлено (настройка по умолчанию), оболочка ведет себя так, как если бы значение было .*. Чтобы игнорировать .и .., они должны совпадать явно (руководство в ksh 93s + 2008-01-31 утверждает, что .и ..всегда игнорируется, но это не правильно описывает реальное поведение).
$ echo *
none zero
$ FIGNORE='@(.|..)'
$ echo *
..two .one none zero
$ FIGNORE='n*'
$ echo *
. .. ..two .one zero
Вы можете включать точечные файлы в шаблон , сопоставляя их явно.
$ unset FIGNORE
$ echo @(*|.[^.]*|..?*)
..two .one none zero
Чтобы расширение оказалось пустым, если каталог пуст, используйте параметр Nсопоставления с образцом: ~(N)@(*|.[^.]*|..?*)или ~(N:*|.[^.]*|..?*).
Zsh
Установите dot_globопцию .
% echo *
none zero
% setopt dot_glob
% echo *
..two .one none zero
.и ..никогда не совпадают, даже если шаблон .явно соответствует ведущему .
% echo .*
..two .one
Вы можете включать точечные файлы в определенный шаблон с помощью D квалификатора glob .
% echo *(D)
..two .one none zero
Добавьте NГлоб классификатор , чтобы сделать расширение выйти пустой в пустом каталоге: *(DN).
Примечание: вы можете получить имя файла результатов расширения в различных порядках (например, с noneпоследующим .oneпоследующим ..two) , основываясь на ваших настройках LC_COLLATE, LC_ALLи LANGпеременных.