Como posso expandir um nome de variável e um curinga em um nome de arquivo?


2

Eu tenho um script bash onde $DIRé um nome de diretório que pode conter espaços.

Este:

rm "$DIR/*.MOV"

dá o erro "Não existe esse arquivo ou diretório". Não há nenhum arquivo chamado literalmente "* .MOV"; Eu quero *expandir para vários argumentos - um por nome de arquivo correspondente.

Por exemplo:

rm some\ folder/foo.MOV some\ folder/bar.MOV

Como posso fazer isso?

Respostas:


5

A citação evita globbing. Tente isso com o GNU bash:

rm "$DIR"/*.MOV

Eu costumo usar {}quando eu quiser acrescentar ou modificar algo sobre minha variável, assim: ${DIR}/*.MOV. Não sei qual deles é melhor, mas o uso de {}obras para meus casos de uso sempre.
Jena

-1

Uma solução alternativa:

for FILE in `ls "$DIR" | grep .MOV`; do
  rm "$DIR/$FILE"
done


@KamilMaciorowski - Não é apenas melhor não usar novas linhas em seus nomes de arquivos? Quem faria isso de qualquer maneira? Não sou administrador de sistemas, estou trabalhando em arquivos de dados produzidos por mim e meus colegas e, embora um deles seja louco (TDAH, entre outras coisas), colocar novas linhas em nomes de arquivos é simplesmente louco e eu teria esse nome de arquivo corrigido. No link, eles até sugerem colocar carimbos de data e hora no nome do arquivo apenas para evitar não colocar novas linhas neles - wtf?
Jena

@jena Não é apenas melhor não derramar óleo no chão? Quem faria isso de qualquer maneira? Talvez um ladino que queira explorar o fato de você ser descuidado. Além disso: acidentes acontecem, arquivadores mal escritos descompactam arquivos com nomes estranhos etc. Se você deseja analisar ls, a escolha é sua, você foi avisado. As pessoas que gostariam de usar esta resposta em seus projetos, onde lidam com nomes de arquivos de origem desconhecida , também devem ser avisadas antes que rmexagerem.
Kamil Maciorowski

Concordo parcialmente, como disse, que não sou um administrador de sistemas, mas um cientista; portanto, geralmente trabalho em clusters protegidos em arquivos produzidos por mim e colegas. Se eu usar ferramentas padrão e trabalhar com pessoas sensíveis, posso analisar lsperfeitamente, estou certo?
Jena
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.