Tente isto:
rename -n 's/\.\./-/' ./*
O caractere .
em regex significa qualquer caractere , então combina com tudo!
Remova -n
quando estiver satisfeito com seus testes
Eu preciso usar o comando rename para renomear centenas de arquivos que contenham .. (2 períodos) dentro do nome do arquivo e alterar .. para - (hífen). O fato de conter períodos parece confundir o comando renomear.
Aqui estão alguns nomes de arquivo de exemplo:
20180201_190000_TX_AJAX..HHE_instrument_0456
20180201_190000_TX_AJAX..HHN_instrument_0456
20180201_190000_TX_AJAX..HHZ_instrument_0456
Eu preciso renomear esses arquivos para procurar linke:
20180201_190000_TX_AJAX-HHE_instrument_0456
20180201_190000_TX_AJAX-HHN_instrument_0456
20180201_190000_TX_AJAX-HHZ_instrument_0456
Este comando:
rename 's/../-/' *
resulta nesses nomes de arquivo:
-180201_190000_TX_AJAX..HHE_instrument_0456 -180201_190000_TX_AJAX..HHN_instrument_0456 -180201_190000_TX_AJAX..HHZ_instrument_0456
Parece que os períodos têm algum propósito especial, então está ficando confuso. Eu então tentei isso:
rename 's/..H/-H/' *
O AJAX na amostra representa uma estação e estas variam. A sintaxe acima funciona e resulta em "20180201_190000_TX_AJAX-HHE_instrument_0456" como esperado para muitas estações, mas resultados inesperados para outras pessoas:
20180201_000000_SA.AKHBR..HNE_instrument_0542 renamed as 20180201_000000_SA.-HBR..HNE_instrument_0542
20180201_000000_SA.KSHB4..HHE_instrument_0935 renamed as 20180201_000000_SA.-HB4..HHE_instrument_0935
20180201_000000_SA.HTM01..HHE_instrument_0933 renamed as 20180201_000000_S-HTM01..HHE_instrument_0933
Parece que qualquer estação que contenha a letra H fica confusa.
Para alguma referência, o AJAX é um código de estação e os códigos de estação têm 4 ou 5 caracteres de comprimento.
Em seguida, tentei isso:
rename ‘s/SA.????..H/SA.????-H/ * -n
mas isso gera um erro:
"Nested quantifiers in regex; marked by <-- HERE in m/SA.??? <-- HERE ?..H/ at (eval 1) line 1."
então eu acho que não gosta de curingas.
Qualquer ajuda que você possa fornecer é bem-vinda.
Tente isto:
rename -n 's/\.\./-/' ./*
O caractere .
em regex significa qualquer caractere , então combina com tudo!
Remova -n
quando estiver satisfeito com seus testes
O ponto corresponderá a qualquer caractere, de modo que o ponto duplo corresponda aos dois primeiros caracteres nos nomes de arquivo, e é por isso que eles estão sendo substituídos por um traço de rename
. Ou escape de cada ponto na expressão regular como \.
ou use um loop (isso é escrito para bash
):
for name in ./*..*; do
newname=${name/../-}
printf 'Would move %s to %s\n' "$name" "$newname"
# mv -i "$name" "$newname"
done
Execute uma vez e certifique-se de que a saída seja a correta antes de remover o #
e executar novamente.
O loop irá iterar todos os nomes no diretório atual que contém dois pontos consecutivos. A substituição do parâmetro ${name/../-}
substituirá a primeira ocorrência de dois pontos consecutivos por um traço. Este é um padrão de globalização de nome de arquivo de shell, então o ponto não é especial de forma alguma.
Tags rename