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]*}' _ {} \;
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.
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.
Tags bash rename files shell-script file-copy