Como copiar e adicionar prefixo a nomes de arquivos em um passo de outro diretório?

2

Eu quero copiar e renomear vários arquivos de um diretório para outro. Particularmente, eu quero algo assim:

/tmp/tmp.XXX/aaa.original.txt
/tmp/tmp.XXX/bb5.original.txt
/tmp/tmp.XXX/x2x.original.txt

copiado para

/root/hello/dump-aaa.txt
/root/hello/dump-bb5.txt
/root/hello/dump-x2x.txt

Eu tentei algumas coisas como essas que não funcionam:

  • cp /tmp/tmp.XXX/*.original.txt /root/hello/*.txt
  • find /tmp/tmp.XXX/ -name '*.original.txt' | xargs -i cp /root/hello/dump-{}.txt
  • for f in /tmp/tmp.XXX/*.original.txt; do cp -- "$f" "/root/hello/dump-$f.txt"; done

Normalmente, os códigos acima resultam em erro :

cp: cannot create regular file '/root/hello/dump-/tmp/tmp.XXX/aaa.original.txt.txt': No such file or directory

    
por Enye Aaron Shi 03.11.2017 / 21:04

1 resposta

1

bash solução:

for f in /tmp/tmp.XXX/*.original.txt; do 
    bn="${f##*/}"   # extracting file basename
    cp "$f" "/root/hello/dump-${bn%%.*}.txt"
done
    
por 03.11.2017 / 21:32