Copie o subdiretório de 1 diretório para outro

0

Eu preciso fazer uma cópia do conteúdo de um diretório para outro.

Eu preciso copiar apenas 1 subpasta.

Por exemplo; se eu tiver uma pasta chamada " de " e quiser copiar uma de suas subpastas (com todas as coisas dentro dela) que se chama " 21-01-2015 " < - este nome muda todos os dias e eu quero executar isso via cronjob, na pasta " para "

+ from
    - 21-01-2015 (**this name changes all the time**)
    - month (**this stays always the same**)

Atualmente, estou usando este comando: cp -a /path/from /path/to , mas este comando faz uma cópia da pasta " de " junto com todas as coisas dentro dela ...

Então, quando você está dentro da pasta " para ", torna-se algo assim:

+ to
    + from
        - 21-01-2015
        - month

em vez de como eu preciso, que é

+ to
    - 21-01-2015

como posso conseguir algo assim?

obrigado

    
por user4480106 21.01.2015 / 22:46

3 respostas

0

cp -a / caminho / de / * / caminho / para irá copiar o conteúdo de / path / from, não o diretório se você tem outros arquivos / dirs em / path / from, e só quer Copie um, você vai ter que chegar a um padrão para combinar isso.

    
por reminy 21.01.2015 / 23:12
0

Você pode tentar este comando:

cp -a from/$(ls from | grep ^[0-9][0-9]) to/
    
por thg 21.01.2015 / 23:20
0

o problema com o comando cp -a / path / from / path / to é que ele fará uma cópia recursiva, o que significa que copiará o diretório de origem (no seu caso "/ path / from") e tudo abaixo dele .

o que você quer é um comando para copiar recursivamente o diretório "21-01-2015" dentro de "from". O comando que você deve usar é:

cp -a /path/from/21-01-2015 /path/to

Observe que você mencionou que o diretório "from" altera nomes. Você não mencionou se o diretório do trabalho anterior permanece ou não. Se o / path / from contiver vários subdiretórios e você usar um caractere curinga em seu comando, você copiará todos os diretórios que você já copiou (isso pode ou não ser o que você deseja). Se você não se importar com a cópia de subdiretórios já copiados em um trabalho cron anterior, poderá usar o seguinte comando para copiar qualquer arquivo ou pasta que comece com um número (isso obviamente NÃO copiará "mês")

cp -a /path/from/[0-9]* /path/to

Se você não quiser copiar cada subdiretório de "from" toda vez que o cronjob for executado (ou seja, você quiser apenas copiar os arquivos que foram adicionados desde o último cronjob), seria melhor usar o rsync. O comando rsync que você usaria seria algo semelhante a:

rsync -avz --exclude 'month' /path/from/ /path/to/

mas, por favor, verifique a página de manual para as opções corretas para fazer exatamente o que você quer (por exemplo, você possivelmente não quer verboso na produção).

    
por Crusty Chris 22.01.2015 / 01:17