Precisa cortar os nomes dos nomes dos arquivos

2

Eu tenho arquivos no diretório UNIX que têm um número único começando, eu tenho que remover o id único seguido por '- 'do nome do arquivo e precisa ter arquivo regular.

Exemplo: 32456113-report.pdf

Obrigatório Nome do arquivo no banco de dados: report.pdf

Eu tenho nomes de arquivos de todos os tipos de extensões .pdf, .doc, .xls, .txt, mas tenho o mesmo número na frente.

Estou usando o winscp para testar ou visualizar os dados e estou executando um script de shell registrando-o como um programa simultâneo de host no oracle apps.

    
por sam 02.07.2013 / 21:13

3 respostas

3

for f in *; do 
    regular="${f#*-}"
    echo "$f => $regular"
done

Esta expansão de parâmetro ( ${f#*-} ) remove, desde o início do valor da variável, a cadeia mais curta que termina com um hífen (consulte manual ). Então:

$ f=32456113-summary-report.doc
$ echo "$f => ${f#*-}"
32456113-summary-report.doc => summary-report.doc
    
por 02.07.2013 / 22:34
1

Não tenho certeza se entendi o que você está tentando fazer, mas acredito que um script simples seria o seguinte

for f in * ; do mv "$f" "$(echo "$f" | cut -d- -f2)"; done

Se você não gosta do eco para cortar bobagens, eu posso procurar as regras de string no bash para você.

    
por 02.07.2013 / 22:05
1

Você pode usar perl-rename .

perl-rename 's/[0-9]*-//' <files>

Dependendo do seu OS / distro, este utilitário pode ser chamado de rename . Por segurança, use o -n flag com perl-rename para fazer uma execução seca antes de realmente renomear qualquer arquivo.

    
por 02.07.2013 / 21:22