Tenho vários arquivos em uma pasta com este formato de nome
01. file one-sdvanv-12lknl.srt
01. file one-sdvanv-12lknl.mp4
02. file two-afdsmakl-asdfafdaf.srt
02. file two-afdsmakl-asdfafdaf.mp4
03. file three-adfadaasd-asdfadfafad-adad1d1das.srt
03. file three-adfadaasd-asdfadfafad-adad1d1das.mp4
Agora, como remover a string depois -
para que o nome do arquivo fique assim
01. file one.srt
01. file one.mp4
02. file two.srt
02. file two.mp4
03. file three.srt
03. file three.mp4
Responder1
for file in *; do
ext=.${file##*.} #Gets file extension
[ "$ext" = ".$file" ] && ext="" #If file had no extension, set it to empty string
nostr=${file%%-*} #Remove everything after -
mv "$file" "$nostr$ext"
done
Responder2
Você poderia usar a substituição de parâmetros bash assim:
for i in *; do
# ${i%%-*} get everything before the first '-' (use ${i%-*} for the last '-')
# ${i/.*} remove everything after the '.'
# ${i##${i%.*}} remove everything except everything after the last '.'
mv "${i}" "${i%%-*}${i##${i%.*}}"
done
Responder3
Usando um loop em bash
:
for name in *.mp4 *.srt; do
mv -i -- "$name" "${name/-*./.}"
done
Isso renomeia cada .mp4
arquivo e .srt
arquivo substituindo a parte do nome entre o primeiro traço e o último ponto por um ponto, por meio de uma substituição de variável.
Optei por escolher especificamente os arquivos .mp4
e .srt
, pois são esses que você mostra na pergunta.
Usando um sh
loop portátil:
for name in *.mp4 *.srt; do
mv -i -- "$name" "${name%%-*}.${name##*.}"
done
Aqui, ${name%%-*}
será o nome original com tudo após o primeiro traço cortado e ${name##*.}
será o sufixo do nome do arquivo após o último ponto no nome do arquivo.
Usando o rename
utilitário Perl:
$ tree
.
|-- 01. file one-sdvanv-12lknl.mp4
|-- 01. file one-sdvanv-12lknl.srt
|-- 02. file two-afdsmakl-asdfafdaf.mp4
|-- 02. file two-afdsmakl-asdfafdaf.srt
|-- 03. file three-adfadaasd-asdfadfafad-adad1d1das.mp4
`-- 03. file three-adfadaasd-asdfadfafad-adad1d1das.srt
0 directory, 6 files
$ rename 's/-.*\././' -- *.mp4 *.srt
$ tree
.
|-- 01. file one.mp4
|-- 01. file one.srt
|-- 02. file two.mp4
|-- 02. file two.srt
|-- 03. file three.mp4
`-- 03. file three.srt
0 directory, 6 files
A expressão Perl s/-.*\././
é uma substituição que será aplicada a cada nome de arquivo fornecido, renomeando o arquivo.
Esta substituição substitui a parte do nome do arquivo do primeiro traço ao último ponto por um ponto.
Você pode querer adicionar algo -n
à invocação do rename
utilitário para ver primeiro o que aconteceria.
Veja também: