localize arquivos modificados de forma recursiva e copie com a estrutura de diretórios que preserva o diretório

1

Eu quero encontrar imagens, de um diretório, que foram adicionadas no último ano e copiá-las para um novo diretório que preserve a estrutura de pastas original.

Estou usando o find, mas não está copiando nada. Existe alguma maneira que pode ser feito usando um comando de linha?

find image/* -mtime +356 -exec cp {} modified-last-year/ \;

Estou no diretório de imagens ao executar este comando e quero pesquisar apenas a pasta de imagens recursivamente.

[EDIT]
Depois das duas respostas que eu fiz seguindo.
 1. find image/* -mtime +356 | cpio -pd /target_dir Eu recebo 0 blocos.

  1. %código%
    AND
  2. find /full/path/to/image -mtime 365 -type f ( "-name *.jpg -o -name *.gif ) -execdir cp {} /full/path/to/image_target_dir/modified-last-year \;
    Nada copiado.

    E simplesmente localize para obter a contagem de arquivos com e sem -type f.

  3. find /full/path/to/image -mtime 365 -type f -execdir cp {} /full/path/to/image_target_dir/modified-last-year \; Eu tenho 0.

    Eu pude verificar que existem arquivos no diretório de imagens e em sub-diretórios que foram adicionados no último 1 ano. de fato deve haver mais de 200 imagens.

    [EDIT 2]
    Eu também tenho que excluir um diretório de encontrar assim que o código a seguir funcionou bem.

    Graças à primeira resposta, consegui criar isso. find /full/path/to/image -mtime 365 -type f | wc -l

por Syed Mudabbir 26.08.2016 / 22:28

2 respostas

2

Você pode usar a localização e cpio no modo de passagem:

 find  image/ -mtime -365 | cpio -pd /target_dir

EDIT: remove desnecessário * do caminho de localização.

    
por 27.08.2016 / 00:11
1

Se você já está no diretório image , então find image/* ... soletra o problema. Em vez disso, para caminhos relativos, use find . (etc) onde o "." significa o diretório atual e sua árvore de subdiretórios, ou melhor ainda, usar caminhos absolutos:

$ find /full/path/to/imagedir -mtime -365 -execdir cpio -pdv {} /absolute/path/to/targetdir \;

Desde que você tenha a devida permissão para fazer isso, o acima deve copiar todos os arquivos modificados mais recentemente do que 365 * 24 horas (antes de hoje) no diretório de destino yr, preservando a estrutura de diretório.

A opção -execdir é mais segura que -exec , faz o mesmo, mas é executada a partir do diretório onde o arquivo selecionado é encontrado.

Você pode restringir ainda mais os arquivos sendo analisados por find, especificando as opções -type f \( "-name \*.jpg -o -name \*.gif \) no cmd acima.

as opções do cpio são:

-p for passthrough (does not make an archive out of the set of dound files)
-d to preserve the directory structure
-v to visualize files being copied

Veja a página de manual de find , no link para obter o% co_de completo % manual on-line, e lembre-se www.startpage.com é um amigo que não faz de você o produto quando você procura por respostas.

    
por 27.08.2016 / 14:59