Testado em Bash e Zsh:
copy nondot files | cp ~/dir1/* ~/dir2/
copy dot files | cp ~/dir1/.* ~/dir2/
copy both nondot and dot files | cp ~/dir1/{.,}* ~/dir2/
move nondot folders | mv ~/dir1/*/ ~/dir2/
move dot folders | mv ~/dir1/.*/ ~/dir2/
move both nondot and dot folders | mv ~/dir1/{.,}*/ ~/dir2/
- Mas é possível, no Bash ou no Zsh, sem usar
find
ortest
, e sem globs Zsh, mover arquivos nondot, dot e nondot e dot files ? - E para copiar pastas nondot, dot e nondot e dot (com seu conteúdo)?
Para esclarecer: procuro 3 comandos separados para cada caso. Ou seja, 6 comandos, que formarão mais 2 tabelas.
A solução óbvia para obter uma lista de arquivos baseada em tipos, além de comandos especializados como
find
,rh
(rawhide),tw
,fdfind
é usar qualificadores zsh glob:*
: arquivos não ocultos de qualquer tipo*(D)
: todos os arquivos de qualquer tipo.*
arquivos ocultos de qualquer tipoAo qual você pode adicionar (entre parênteses)
/
.
@
%
p
=
: restringe a arquivos do tipo diretório regular symlink device pipe socket e muito mais^/
arquivo de qualquer tipo, exceto diretórioEles podem ser prefixados com
-
para que a verificação seja feita após a resolução do link simbólico (e-@
likefind
's-xtype l
retornaria apenas links simbólicos quebrados), e você pode especificar mais de um, separado por,
para listar arquivos de mais de um tipo, como*(D=,%,p)
para todos os soquetes, dispositivos e tubos (oD
que é ativadoDOTGLOB
para esse globo se aplica globalmente).bash
não tem equivalente, mas você sempre pode invocarzsh
frombash
se por algum motivo precisar usarbash
. Por exemplo, para copiar os arquivos ocultos que não são de diretório:Ou outra ferramenta que possa fazer isso.
Por exemplo, filtrar uma expansão glob com base no tipo para passar
cp
poderia ser feito comperl
:(com a ressalva de que, se não houver arquivo correspondente, ele será executado
cp -- dest/
e reportará um erro de sintaxe).Tenha também cuidado com o fato de que versões mais antigas de
bash
(anteriores a 5.2) costumavam incluir.
e..
na expansão de.*
(em sistemas e sistemas de arquivos ondereaddir()
os retorna (a maioria)). Com eles, você precisa definir adotglob
opção e usar[.]*
em vez de.*
excluí-los.