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
переменных.