O comando rename
que você precisa é:
-
Se você estiver usando
rename
deutil-linux
:rename . _1. *.orig && rename .orig '' *.orig
O primeiro substituirá a primeira ocorrência de
.
por_1.
de todos os arquivos terminados em.orig
. O segundo removerá o.orig
dos nomes dos arquivos. -
Se você estiver usando perl-rename (padrão em sistemas baseados em Debian), as coisas são mais simples, já que usa expressões regulares compatíveis com Perl, portanto, pode fazer tudo em uma única etapa:
rename 's/(\..*)\.orig/_1$1/' *orig
Como esta versão usa O regex corresponderá ao primeiro
.
(\.
, o.
precisa ser escapado, pois ti significa "qualquer caractere" que não tenha escapado), então tudo (.*
) até% código%. Como o primeiro padrão está entre parênteses, ele é "capturado" e pode, posteriormente, ser chamado de.orig
. Portanto, a substituição substituirá qualquer coisa correspondente anteriormente por um$1
e o padrão capturado (a primeira extensão) e removerá simultaneamente o_1
.
Você pode combinar os comandos com .orig
da seguinte forma:
find /example -name '*.orig' -exec rename . _1. {} +
find /example -name '*.orig' -exec rename .orig '' {} +
Ou:
find /example -name '*.orig' -exec rename 's/(\..*)\.orig/_1$1/'
Você nem precisa de find
para isso. Se todos os seus arquivos estiverem no mesmo diretório, você pode usar os comandos acima diretamente, ou, para torná-lo recursivo (supondo que você esteja usando o bash):
shopt -s globstar ## make ** recurse into subdirectories
rename.ul . _1. **.orig && rename.ul .orig '' **.orig ## util-linux
rename 's/(\..*)\.orig/_1$1/' **orig ## perl rename
Na verdade, estritamente falando, você nem precisa de find
. Você pode fazer tudo no shell (consulte aqui para obter uma explicação sobre a manipulação da string do shell habilidades):
for file in **/*.orig; do
newname="${file%%.*}_1.${file#*.}"
mv "$file" "${newname/.orig/}"
done
Por fim, uma observação sobre globs ( rename
usa uma glob, não uma expressão regular ). A -name
é a sintaxe do Windows glob para "qualquer coisa que termine em *.*.orig
". O equivalente e o que você deve usar com seu .orig
é find
. O *.orig
sozinho corresponde a qualquer coisa, usando *
somente corresponderá aos nomes de arquivos com duas extensões, a última delas é *.*.orig
.