renomeia um arquivo mantendo os 10 primeiros caracteres intactos

1

Por exemplo, nomes de arquivos são assim:

Order21039 Internal Document.doc
Order33920 New Order.doc
Order39307 Exam.doc
.
.
.

Eu quero manter os dez primeiros caracteres e acrescentar outro texto como:

Order21039.test.doc
Order33920.test.doc
.
.
.

Qual é o melhor e mais fácil método para o FreeBSD?

    
por Plato 17.10.2017 / 15:08

3 respostas

4

com zsh :

autoload zmv # best in ~/.zshrc
zmv -n '(?(#c10))*.doc' '$1.test.doc'

(remova -n quando feliz).

Você pode alterar isso para:

zmv -n '(Order<->)*.doc' '$1.test.doc'

Para corresponder a Order<anydecimalnumber> em vez de apenas 10 caracteres.

Com perl rename:

rename -n 's|^\./.{10}\K.*\.doc|.test.doc|s' ./*.doc

(lembre-se que ao contrário de zmv , ele não protege contra o mapeamento de vários arquivos para o mesmo arquivo)

Se você não tem nenhum destes, com um shell parecido com o POSIX, como o /bin/sh :

do FreeBSD
for file in ??????????*.doc; do
  newfile=${file%"${file#??????????}"}.test.doc
  echo mv -i -- "$file" "$newfile"
done

(remova echo quando feliz).

Com qualquer shell parecido com o Bourne:

for file in ??????????*.doc; do
  newfile='expr " $file" : ' \(.\{10\}\)''.test.doc
  echo mv -i -- "$file" "$newfile"
done
    
por 17.10.2017 / 15:11
2

um loop simples no shell com um pouco de sed :

for file in *
do
echo mv "$file" 'echo "$file" | sed -e 's/\(.\{10\}\).*.\(.\{3\}\)/.test./''
done

se estiver satisfeito com a saída, elimine o echo antes de mv .

Isso processará todos os arquivos no diretório e funcionará para nomes de arquivos com extensão de três caracteres.

    
por 17.10.2017 / 15:24
1

Existem várias soluções, algumas dependendo do sistema operacional:

Rename multiple files, groups of files

        1) rename -- Debian version and RedHat version differ, q.v.
           (try package util-linux:
           http://en.wikipedia.org/wiki/Util-linux)

        2) ren -- RedHat relatives

        3) renameutils -- package contains qmv, imv, icp, qcp, and deurlname

        4) mved -- (circa 2006; good as of 2015.05), perl
           http://raf.org/mved/
           (An earlier shell version may be available.)

        5) rename -- perl builtin library routine (DIY)

        6) mmv -- move/rename/copy/append/link multiple files by wildcard patterns

        7) gprename - batch rename using a GUI

        8) krename - batch rename using a GUI

Por exemplo, esse código no arquivo s1 demonstra mved:

# Set up environment.
pl " Input data file of names $FILE:"
head $FILE


i=0
while IFS='' read -r file
do
  (( i++ ))
  # echo " Name $i: $file"
  touch "$file"
done < $FILE

pl " Files to consider renaming:"
ls -1 *.doc

pl " Expected output:"
cat $E

# "Order21039 Internal Document.doc" -> "Order21039.test.doc"
pl " Verbose execution and file list:"
mved -v "??????????*.doc" ==========.test.doc
pe
ls -1 *.doc

produz:

 Input data file of names data1:
Order21039 Internal Document.doc
Order33920 New Order.doc
Order39307 Exam.doc

-----
 Files to consider renaming:
Order21039 Internal Document.doc
Order33920 New Order.doc
Order39307 Exam.doc

-----
 Expected output:
Order21039.test.doc
Order33920.test.doc
Order39307.test.doc

-----
 Verbose execution and file list:
mv Order21039 Internal Document.doc Order21039.test.doc
mv Order33920 New Order.doc Order33920.test.doc
mv Order39307 Exam.doc Order39307.test.doc

Order21039.test.doc
Order33920.test.doc
Order39307.test.doc

Em um sistema como:

OS, ker|rel, machine: FreeBSD, 11.0-RELEASE-p9, amd64
bash GNU bash 4.4.12

Alguns detalhes para o código (perl) mved:

mved    carefully rename multiple files (man)
Path    : ~/bin/mved
Version : 1.4
Length  : 495 lines
Type    : Perl script, ASCII text executable
Shebang : #!/usr/bin/env perl
Help    : probably available with -h
Home    : http://raf.org/mved/ (doc)
Modules : (for perl codes)
 warnings       1.23
 strict 1.08
 Getopt::Std    1.10

A sequência de chamada para mved inclui um "caractere curinga" local, "=", que representa o resultado correspondente da correspondência com caracteres curinga na primeira expressão.

felicidades, drl

    
por 17.10.2017 / 18:39