Zsh
mv Foo/*(DN) Bar/
ou
setopt -s glob_dots
mv Foo/*(N) Bar/
(Deixe de fora (N)
se você sabe que o diretório não está vazio.)
Bater
shopt -s dotglob nullglob
mv Foo/* Bar/
Ksh93
Se você souber que o diretório não está vazio:
FIGNORE='.?(.)'
mv Foo/* Bar/
Padrão (POSIX) sh
for x in Foo/* Foo/.[!.]* Foo/..?*; do
if [ -e "$x" ]; then mv -- "$x" Bar/; fi
done
Se você deseja permitir que o mv
comando retorne um status de erro, embora tenha sido bem-sucedido, é muito mais simples:
mv Foo/* Foo/.[!.]* Foo/..?* Bar/
GNU find e GNU mv
find Foo/ -mindepth 1 -maxdepth 1 -exec mv -t Bar/ -- {} +
Localização padrão
Se você não se importa de mudar para o diretório de origem:
cd Foo/ &&
find . -name . -o -exec sh -c 'mv -- "$@" "$0"' ../Bar/ {} + -type d -prune
Aqui estão mais detalhes sobre como controlar se os arquivos de ponto são correspondidos no bash, ksh93 e zsh.
Bater
Defina a dotglob
opção .
$ echo *
none zero
$ shopt -s dotglob
$ echo *
..two .one none zero
Há também a GLOBIGNORE
variável mais flexível , que você pode definir para uma lista separada por dois pontos de padrões curinga para ignorar. Se não dotglob
estiver definido (a configuração padrão), o shell se comportará como se o valor estivesse vazio se estiver definido e como se o valor estivesse .*
se a opção não estiver definida . Consulte Expansão do nome do arquivo no manual. Os diretórios difundidos .
e ..
sempre são omitidos, a menos que .
correspondam explicitamente ao padrão.
$ GLOBIGNORE='n*'
$ echo *
..two .one zero
$ echo .*
..two .one
$ unset GLOBIGNORE
$ echo .*
. .. ..two .one
$ GLOBIGNORE=.:..
$ echo .*
..two .one
Ksh93
Defina a FIGNORE
variável . Se não estiver definido (a configuração padrão), o shell se comportará como se o valor fosse .*
. Para ignorar .
e ..
, eles devem ser correspondidos explicitamente (o manual no ksh 93s + 2008-01-31 declara isso .
e ..
sempre é ignorado, mas isso não descreve corretamente o comportamento real).
$ echo *
none zero
$ FIGNORE='@(.|..)'
$ echo *
..two .one none zero
$ FIGNORE='n*'
$ echo *
. .. ..two .one zero
Você pode incluir arquivos de ponto em um padrão , correspondendo-os explicitamente.
$ unset FIGNORE
$ echo @(*|.[^.]*|..?*)
..two .one none zero
Para que a expansão saia vazia se o diretório estiver vazio, use a N
opção de correspondência de padrão: ~(N)@(*|.[^.]*|..?*)
ou ~(N:*|.[^.]*|..?*)
.
Zsh
Defina a dot_glob
opção .
% echo *
none zero
% setopt dot_glob
% echo *
..two .one none zero
.
e ..
nunca são correspondidos, mesmo se o padrão corresponder .
explicitamente à liderança .
% echo .*
..two .one
Você pode incluir arquivos de ponto em um padrão específico com o D
qualificador glob .
% echo *(D)
..two .one none zero
Adicione o N
qualificador glob para fazer a expansão sair vazia em uma pasta vazia: *(DN)
.
Nota: você pode obter resultados de expansão de nome de arquivo em ordens diferentes (por exemplo, none
seguido por .one
seguido por ..two
) com base nas definições das LC_COLLATE
, LC_ALL
e LANG
variáveis.