copia arquivos modificados após uma data específica usando comutadores cp

6

Quando executo o comando find . -mtime -60 , obtenho a lista de arquivos modificados nos últimos 60 dias.

Então, quando executo find . -mtime -60 -exec cp {} /tmp/1 \; , posso copiar esses arquivos para um novo diretório para processamento

No entanto, se eu quiser preservar os timestamps, não será possível copiar apenas os arquivos necessários quando eu executar find . -mtime -60 -exec cp -LR --preserve=timestamps {} /tmp/2 \;

O que acaba acontecendo é que TODOS os arquivos no diretório de origem são copiados, em vez de apenas os arquivos que eu preciso.

Alguma solução aqui?

    
por cyberjar09 07.03.2014 / 01:36

3 respostas

10

O que está acontecendo aqui é que quando você usa a opção -R para cp e fornece um diretório como um argumento, ele copia tudo nesse diretório. Além disso, isso não preservará a estrutura de diretórios, pois todos os arquivos em diretórios inferiores serão copiados diretamente para /tmp/2 . Isso pode ser o que você quer (veja a resposta de X Tian para saber como fazê-lo dessa maneira), mas cuidado se houver os arquivos têm o mesmo nome, um sobrescreve o outro na detenção.

Para preservar a estrutura de diretórios, você pode usar cpio :

find . -mtime -60 -print0 | cpio -0mdp /tmp/2

Se a opção -0 (ou equivalente) estiver indisponível, você pode fazer isso, mas tenha cuidado, nenhum dos seus nomes de arquivo contém uma nova linha:

find . -mtime -2 | cpio -mdp /tmp/2

cpio também deve suportar a opção -L , embora tenha cuidado com isso, pois, em alguns casos, pode causar um loop infinito.

    
por 07.03.2014 / 02:03
2

Você deve excluir diretórios, o primeiro arquivo que encontrar impressões é . e você também usa a opção recursiva na cópia.

Seguinte é mais o que você pretendia, no entanto, como Graeme aponta, cpio -pdm irá preservar a estrutura de diretório original, cp só irá copiar para o diretório de destino.

find . -mtime -60 -type f -exec cp -Lv --preserve=timestamps {} /tmp/2 \;

Estou deixando esta resposta para destacar a diferença entre o Graeme e essa solução. Desde que eu acho que acrescenta algo para a resposta geral à pergunta original. Outros readres podem achar isso interessante.

    
por 07.03.2014 / 01:57
1

Isso preserva os timestamps nos diretórios e arquivos:

find . -mtime -60 -type f -exec cp --parents -fuav {} /tmp/2 \;

Testado usando o CentOS 7.2.

    
por 29.07.2016 / 12:27