Eu tenho um diretório com muitos programas C compilados dos quais gostaria de fazer backup. No momento eles estão nomeados, program.out
mas eu gostaria de mudar isso para apenas program
.
Ainda seria possível excluí-los? Além disso, que tipo de regex eu usaria para renomear todos eles rapidamente?
Responder1
Para fazer backup do seu código, use git ou outro software de controle de versão. Na internet você tem muitas opções, para citar algumas: github, bitbucket.
No git você obteve o arquivo .gitignore se você adicionar lá *.out então ele não será transferido para o repositório
Responder2
Não fui muito claro na sua primeira pergunta. Se você quiser renomear program.out
para program
, basta executar:
mv program{.out,}
Para a segunda pergunta, supondo que eu queira obter uma lista de arquivos /etc
com um sufixo:
#!/bin/bash
ls /etc > /tmp/etcfiles
while read line
do
if [[ $line =~ \..+ ]]; then
echo $line
fi
done < /tmp/etcfiles
Você pode ajustar o acima conforme necessário.
\.
corresponde a um período literal..
corresponde a qualquer caractere após o ponto final.+
diz que pelo menos um caractere deve seguir o período inicial. Portanto, isso corresponderátest.c
, mas não.test.
Se você quiser correspondertest.
também, altere+
para a*
.
Responder3
Se você estiver usando o bash como shell, esta é uma tarefa simples para um pipeline de shell.
ls | grep '\.out$' | while read file; do echo mv "$file" "${file%.*}"; done
ls
produz uma lista de arquivos no diretório.
grep '\.out$'
extrai os nomes de arquivos que terminam em .out e descarta o restante.
while read file
lê os nomes dos arquivos um de cada vez.
echo mv "$file" "${file%.*}"
exibe, mas não executa, um comando mv que renomearia cada arquivo para uma versão sem sua extensão. O ${file%.*}
negócio é a sintaxe bash para remover uma extensão de arquivo. Quando estiver satisfeito com o fato de que o pipeline faria o que você queria se fosse executado de verdade, remova a echo
peça e deixe-a funcionar de verdade.
ls | grep '\.out$' | while read file; do mv "$file" "${file%.*}"; done