Eu assumo que seu diretório de trabalho atual é o que contém os arquivos que você deseja renomear, como neste exemplo:
$ tree
.
├── FILE1[file].doc
├── FILE2[file].doc
├── FILE3[file].doc
└── subdir
├── FILE1[file].doc
├── FILE2[file].doc
└── FILE3[file].doc
Agora você pode executar o seguinte comando para listar recursivamente todos os arquivos no diretório atual com a extensão .doc
:
$ find . -type f -iname '*.doc'
./subdir/FILE3[file].doc
./subdir/FILE2[file].doc
./subdir/FILE1[file].doc
./FILE3[file].doc
./FILE2[file].doc
./FILE1[file].doc
Para renomear todos esses arquivos e remover a parte [file]
antes da extensão .doc
(se estiver presente) de cada nome, execute este:
$ find . -type f -iname '*.doc' -exec rename -v 's/\[file\](?=\.doc$)//' {} +
./subdir/FILE3[file].doc renamed as ./subdir/FILE3.doc
./subdir/FILE2[file].doc renamed as ./subdir/FILE2.doc
./subdir/FILE1[file].doc renamed as ./subdir/FILE1.doc
./FILE3[file].doc renamed as ./FILE3.doc
./FILE2[file].doc renamed as ./FILE2.doc
./FILE1[file].doc renamed as ./FILE1.doc
Isso executa o comando rename -v 's/\[file\](?=\.doc$)//' FILES
, em que FILES
é substituído pela lista de arquivos retornados pelo comando find
mostrado acima.
O que o rename 's/PATTERN/REPLACEMENT/'
faz é aplicar o padrão de expressão regular \[file\](?=\.doc$)
(corresponde à sequência exata "[arquivo]" se seguido pela sequência exata ".doc" no final da linha) para cada um dos nomes de arquivos especificados. Se corresponder, a parte correspondente do nome do arquivo será substituída pela string de substituição, que está vazia no nosso caso.