Essa é uma pergunta um pouco embaraçosa, mas devo admitir que, no final da minha carreira, ainda tenho dúvidas sobre o comando mv.
Frequentemente, tenho esse problema: preciso mover todos os arquivos recursivamente para um nível acima. Digamos que eu tenha a pasta foo e uma barra de pastas dentro dela. Bar tem uma bagunça de arquivos e pastas, incluindo arquivos e pastas de pontos. Como movo tudo na barra para o nível foo?
Se foo estiver vazio, simplesmente movo a barra um nível acima, excluo foo e renomeio a barra para foo. Parte do problema é que não consigo descobrir qual é o curinga do mv para "tudo, incluindo pontos". Uma parte dessa pergunta é esta - existe uma discussão aprofundada sobre os curingas que os comandos cp e mv usam em algum lugar (pesquisar no Google isso apenas traz tutoriais muito básicos).
fonte
To eliminate the error caused by also matching "." and "..", use this command: mv bar/{,.[!.],..?}* .
A maneira mais fácil de fazer isso é fazê-lo em dois comandos, porque * não corresponde a.
Você não deseja usar a barra /.* que descobri ao cometer este erro:
Isso é uma coisa ruim. Alguém quer adivinhar por quê? ;-)
fonte
.*
para.
e..
. Zsh não faz para mim, pelo menos.A primeira coisa a saber sobre globbing - é feito pelo shell, não pelo comando. Verifique a página de manual do seu shell para todos os detalhes.
fonte
Este coleta todos os arquivos das subpastas e os move para o diretório atual
Se você deseja escrever arquivos com o mesmo nome, use
fonte
mv .??* *
cuidará de qualquer coisa, exceto ponto seguido por um único caractere. Se isso for comum à sua situação, você pode adicionar.[a-zA-Z0-9]*
. Isso ainda vai deixar os arquivos com nomes como.;
,.^
e.^I
(TAB). Se você precisar lidar com tudo, precisará ser um pouco mais complexo.fonte
Se você possui uma estrutura de diretórios
/foo/bar/
e deseja mover todos os arquivos embar
uma etapa acima, entre nobar
diretório e digite o seguinte:Geralmente, acho que
cpio(1)
é melhor para esse tipo de tarefa. Você pode conferir a documentação detalhada emitindoinfo cpio
em seu shell.fonte