Estou tentando copiar todos os arquivos do diretório A para o diretório B. Todos os arquivos do diretório A estão começando com ponto, por exemplo:
A/.a
A/.b
A/.c
que encontrei se usar:, cp A/* B
sempre receba erro:
cp: cannot stat 'A/*': no such file or directory
Parece que não há nenhuma opção para cp
como ls
para lidar com entradas iniciados com ponto, alguém tem idéia de como consertar isso?
-r
. Sem-r
, ele apenas pulará os diretórios.-R
deve funcionar bem. Se você acha que está errado, explique o motivo.Se bash, você pode definir
dotglob
antes de copiarOu uma linguagem de programação
Se você não deseja configurar o dotglob, apenas
fonte
A
estão ocultos. Ele só quer copiar isso.O que você está procurando é mais na linha de:
Isso corresponderá a todos os arquivos de ponto, mas não a "." ou "..". A maioria das soluções acima são boas, desde que você não esteja trabalhando recursivamente. Mas assim que você quiser fazer algo como:
Sem omitir "..", você copiará tudo do diretório-pai para baixo, incluindo arquivos não-dotfiles.
fonte
.a
ou.x
. O menor padrão de globbing que encontrei que corresponde a todos os arquivos de pontos, exceto.
e..
é.[^.]*
.Eu justed tentei o seguinte e funciona apenas encontrar ...
fonte
A/.
eA/..
como parâmetros paracp
, o que pode ser problemático caso o OP também precise copiar diretórios (usandocp -r
)Isso não
cp
é culpa , é o bash: o bash se expande*
em todos os.
arquivos não ocultos (ou seja: não começando com ).O Bash se expandirá
.*
(portantoA/.*
, no seu caso) com todos os arquivos que começam com.
, mas infelizmente também inclui.
e..
(diretórios atual e pai) que você provavelmente desejará ignorar. (Observe que outros shells, como o zsh, não os incluiriam, e o IIRC também bash, depois de definir algumas opções).Uma solução fácil poderia ser remover
.
e..
dos arquivos encontrados.*
, de uma maneira (muito) hacky como esta:ou este (provavelmente mais limpo: ele usa
find
para encontrar os arquivos para copiar):mas você provavelmente encontrará soluções mais limpas.
fonte
for loop
e depois criar umgrep
processo extra apenas para fazer um trabalho como essecp A/.*
?cp
irá ignorar o "." e diretórios "..".Se todos começarem com um ponto, basta usar
A/.*
:Espero que isto ajude!
fonte
Você pode usar este script
fonte
cópia de:
Lista:
listar arquivos sem diretórios descendentes:
fonte
Você deve excluir. e .. da lista de arquivos passada para o cp!
Isso é seguro:
fonte
Este é um tópico antigo ... mas sempre consegui copiar todos os arquivos. Incluindo arquivos / pastas que começam com '.'
O exemplo copiará todos os arquivos e pastas:
cp -aup /root/.* / backup / root /
fonte