Zsh
mv Foo/*(DN) Bar/
ou
setopt -s glob_dots
mv Foo/*(N) Bar/
(Deixe de fora o (N)
se você souber que o diretório não está vazio.)
Bash
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ê estiver disposto a permitir que o comando mv
retorne um status de erro, mesmo que 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/ -- {} +
Pesquisa padrão
Se você não se importa em mudar para o diretório de origem:
cd Foo/ &&
find . -name . -o -exec sh -c 'mv -- "$@" "$0"' ../Bar/ {} + -type d -prune
Veja mais detalhes sobre como controlar se os arquivos de ponto são correspondidos no bash, ksh93 e zsh.
Bash
Defina a dotglob
opção .
$ echo *
none zero
$ shopt -s dotglob
$ echo *
..two .one none zero
Há também a GLOBIGNORE
variable mais flexível, que você pode definir uma lista separada por dois pontos de padrões de caractere curinga para ignorar. Se não definido (a configuração padrão), o shell se comporta como se o valor estivesse vazio se dotglob
estivesse definido e como se o valor fosse .*
se a opção não fosse definida. Consulte Expansão do nome de arquivo no manual. Os diretórios difusos .
e ..
são sempre omitidos, a menos que .
seja correspondido explicitamente pelo padrão.
$ GLOBIGNORE='n*'
$ echo *
..two .one zero
$ echo .*
..two .one
$ unset GLOBIGNORE
$ echo .*
. .. ..two .one
$ GLOBIGNORE=.:..
$ echo .*
..two .one
Ksh93
Defina a FIGNORE
variable . Se não 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 em ksh 93s + 2008-01-31 declara que .
e ..
são sempre ignorados, 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 combinando-os explicitamente.
$ unset FIGNORE
$ echo @(*|.[^.]*|..?*)
..two .one none zero
Para que a expansão saia vazia se o diretório estiver vazio, use a opção de correspondência de padrão N
: ~(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 que o padrão corresponda explicitamente à .
.
% echo .*
..two .one
Você pode incluir arquivos de pontos em um padrão específico com o D
qualificador de glob .
% echo *(D)
..two .one none zero
Adicione o qualificador N
glob para tornar a expansão vazia em um diretório vazio: *(DN)
.
Observação: você pode obter resultados de expansão de nome de arquivo em pedidos diferentes
(por exemplo, none
seguido por .one
seguido por ..two
)
com base nas suas configurações das variáveis LC_COLLATE
, LC_ALL
e LANG
.