encontrar arquivo, copiar mas com nome diferente

2

Eu tenho arquivos com números aleatórios na pasta / home / user / files (a cada 4 dias eu tenho novos). por exemplo:

john20
john25
john40
tom12
tom32
simon2
simon8
simon53

Eu quero pegar apenas os últimos arquivos modificados (os mais novos) e copiá-los para locais diferentes (/ home / user / fixed) sem esses números no nome do arquivo.

Eu sei como filtrar e copiar isso usando o comando find, mas não sei como copiar todos eles sem esses números.

find $files_are_here -maxdepth 1 -mtime -2 -type f -exec cp {} $new_path \;

Isso copiará todos os arquivos modificados nos últimos 2 dias para o novo caminho, mas com o nome original. No meu caso:

john40
tom32
simon53

mas gostaria de ter apenas john, tom e simon dentro dessa pasta. Então, depois que eu executar meu script novamente, eles serão substituídos pelo mais novo.

    
por s1c 26.08.2014 / 12:49

2 respostas

0

Esperamos que o seguinte seja auto-explicativo

find -maxdepth 1 -mtime -2 -type f  -exec bash -c 'name=${1##*/}; cp  "$name" /some/other/dir/${name%%[0-9]*}' _ {} \;
    
por 26.08.2014 / 13:18
1
find -mtime -2 \
     -maxdepth 1 \
    \! -type d \
    \( -name 'simon*' \
    -o -name 'tom*' \
    -o -name 'john*' \
    \) | tar -T - \
     --xform='s/[0-9]*$//' \
     -cf - | tar -C ./path/to/destination --keep-newer-files -xf -

Eu acho que isso vai funcionar - parece funcionar para mim. Contanto que os arquivos simon , tom e john devam ser sobrescritos uma vez a cada dois dias - acredito que isso deva ser feito. Ou isso ou está muito perto. Oh, mas isso requer o GNU tar - e provavelmente o GNU find também, embora eu não tenha certeza sobre o último. Eu não chequei muito, porque a maioria deles eram suas próprias opções.

    
por 27.08.2014 / 04:08