Comando Bash para excluir um determinado arquivo em * pastas

4

A situação não é tão simples quanto o título pode implicar.

Eu tenho um arquivo .desktop que executa com bash -c para definir uma variável de ambiente e carregar o programa. Agora preciso adicionar outro comando antes de carregar o programa.

Às vezes, o programa cria um arquivo chamado SOFT_REPAIR in ~/path to/*/ e eu preciso excluí-lo antes de executar o programa. * representa qualquer versão que o programa possa ter, e como /path to/ implica, há espaços nos nomes das pastas nas quais o SOFT_REPAIR reside.

Então aqui está a coisa:

  • Preciso fazer /path\ to/ ?
  • O rm 'path to/*/SOFT_REPAIR/' funcionará?
  • Posso usar o comando rm se SOFT_REPAIR existe ou não, ou preciso usar a instrução if ?
por Oxwivi 16.02.2014 / 10:42

2 respostas

3

Para resolver seu problema original:

find ~/'path to'/ -name SOFT_REPAIR -exec rm -f "{}" \;

ou, se você tiver o GNU find :

find ~/'path to'/ -name SOFT_REPAIR -delete

Para responder às suas perguntas:

  • Você precisa excluir a barra invertida dos espaços nos nomes dos arquivos, se não os incluir entre aspas.
  • Não, porque as citações impedem a expansão do globo ocular . Isso deve funcionar, no entanto:

    rm 'path to'/*/SOFT_REPAIR/
    

    assumindo que SOFT_REPAIR reside apenas dois níveis abaixo de path to/

  • rm em um arquivo inexistente causará um erro. rm -f falhará silenciosamente (pelo menos na implementação GNU de rm ).

por 16.02.2014 / 11:15
2

Sim, isso funciona. Basta usar rm -f path\ to/*/SOFT_REPAIR .

Mas por que você simplesmente não tenta?

michas@lenny:~/t$ mkdir -p path\ to/{foo,bar}
michas@lenny:~/t$ touch path\ to/{foo,bar}/SOFT_REPAIR
michas@lenny:~/t$ tree
.
'-- path\ to
    |-- bar
    |   '-- SOFT_REPAIR
    '-- foo
        '-- SOFT_REPAIR

3 directories, 2 files
michas@lenny:~/t$ rm path\ to/*/SOFT_REPAIR
michas@lenny:~/t$ tree
.
'-- path\ to
    |-- bar
    '-- foo

3 directories, 0 files
michas@lenny:~/t$ rm path\ to/*/SOFT_REPAIR
rm: cannot remove 'path to/*/SOFT_REPAIR': No such file or directory
michas@lenny:~/t$ rm -f path\ to/*/SOFT_REPAIR
michas@lenny:~/t$ tree
.
'-- path\ to
    |-- bar
    '-- foo

3 directories, 0 files
    
por 16.02.2014 / 11:15

Tags