Excluindo o Bash File de se modificar

0

Estou aprendendo como fazer o script "à prova de idiotas". Eu tenho alguns scripts que modificam arquivos na pasta atual, mas eles também modificam o próprio script. Eu sei que tudo se resume ao loop "for" com "find" eu não consigo acertar.

for f in $(find . -type f | grep -v $0)

Meu objetivo é incluir todos os arquivos que ele pode encontrar no catálogo atual e seus sub-catálogos, mas excluir o próprio script executado. Ele está trabalhando com o grep -v, mas agora está excluindo todos os arquivos que incluem o nome do script (como cópias do script nas subpastas). Alguém sabe como fazer isso funcionar apenas para o script executado? Eu devo assumir que alguém pode mudar o nome em algum momento, então excluí-lo à mão está fora de questão.

    
por DrAhzek 20.11.2018 / 19:35

2 respostas

0

Exemplo da abordagem find . -type f ! -path $0 . Observe como o script relata somente o foo.sh no diretório "d" . Não é o foo.sh no diretório atual.

$ find . -print
.
./a
./b
./c
./foo.sh
./d
./d/foo.sh
$ cat foo.sh
#!/bin/bash
for f in $(find . -type f ! -path $0); do
echo $f
done
$ ./foo.sh
./a
./b
./c
./d/foo.sh
$

Como alternativa, tente for f in $(find . -type f | grep -v "^\./foo\.sh$"); do

    
por 20.11.2018 / 19:50
0

O que há de errado com:

for f in $(find . -type f); do
 case $f in 
  */$0|$0)
     continue
  ;;
  *)
     echo 'Do something'
  ;;
 esac
 fi
done 
    
por 20.11.2018 / 19:51

Tags