Eu sei como usar o cp
comando para -r
copiar recursivamente ( ) pastas aninhadas enquanto preserva ( -p
) metadados de arquivo, como tempos de modificação:
cp -pr "/path/from" "path/to"
Existe uma maneira de omitir uma pasta específica aninhada no primeiro nível de profundidade, por nome?
Por exemplo, uma pasta chamada Photos
está sendo copiada. Eu quero pular a Dogs
pasta aninhada dentro. Eu quero tudo, mas não /Photos/Dogs
pasta nem seu conteúdo.
Acho que poderia deixar copiar e depois deletar. Mas isso é ineficiente. Existe uma maneira de evitar a cópia da pasta em primeiro lugar.
Estou trabalhando no macOS Mojave atualmente e no FreeBSD 12 posteriormente.
Sim, você pode facilmente fazer uma cópia de uma estrutura de arquivo evitando copiar um ou vários dos subdiretórios, mas você não faria isso com
cp
.Com
rsync
, você pode excluir arquivos e/ou diretórios usando um padrão de exclusão. No seu caso, parece que você gostaria de usarIsso faria
path/to
uma cópia exata de/path/from
, evitando qualquer diretório chamadoDogs
em qualquer correspondência de caminhoPhotos/Dogs
. Se você remover o final/
do diretório de origem, obterápath/to/from
uma cópia exata da pasta de origem.O padrão de exclusão usado faria
rsync
ignorar qualquer subdiretório chamadoDogs
localizado em um diretório chamadoPhotos
, por exemplo/path/from/Photos/Dogs
e/path/from/holidays/2013/Photos/Dogs
. O uso--exclude=Dogs/
excluiria qualquer subdiretório chamadoDogs
, independentemente do nome do diretório pai, e o uso--exclude=Dogs
excluiria qualquer coisa (independentemente do tipo de arquivo) chamadoDogs
. Para corresponder apenas a umPhotos/Dogs
diretório diretamente sob/path/from
, use--exclude='/Photos/Dogs/'
.Consulte a seção chamada "INCLUIR/EXCLUIR REGRAS DE PADRÃO" no
rsync
manual do seu sistema.A opção
-a
(--archive
) garantirá que carimbos de data e hora, permissões etc. também sejam copiados, e também habilitará a cópia recursiva. A opção-v
(--verbose
) habilita a operação detalhada.Adicione
-H
(--hard-links
) se você quiser preservar o hard linking entre os nomes (novamente, veja orsync
manual).