O pano de fundo da minha recomendação de solução é a história de um amigo que, até a segunda semana de seu primeiro trabalho, limpou metade de um servidor de build. Portanto, a tarefa básica é descobrir se existe um arquivo e, se houver, vamos excluí-lo. Mas existem algumas corredeiras traiçoeiras neste rio:
Tudo é um arquivo.
Os scripts têm poder real apenas se resolverem tarefas gerais
Para ser geral, usamos variáveis
Costumamos usar -f force em scripts para evitar intervenção manual
E também ame -r recursivo para garantir a criação, cópia e destruição em tempo hábil.
Considere o seguinte cenário:
Temos o arquivo que queremos excluir: filesexists.json
Este nome de arquivo é armazenado em uma variável
<host>:~/Documents/thisfolderexists filevariable="filesexists.json"
Também temos uma variável de caminho para tornar as coisas realmente flexíveis
<host>:~/Documents/thisfolderexists pathtofile=".."
<host>:~/Documents/thisfolderexists ls $pathtofile
filesexists.json history20170728 SE-Data-API.pem thisfolderexists
Então, vamos ver se -e
faz o que deveria. Os arquivos existem?
<host>:~/Documents/thisfolderexists [ -e $pathtofile/$filevariable ]; echo $?
0
Faz. Magia.
No entanto, o que aconteceria, se a variável do arquivo fosse acidentalmente avaliada como nuffin '
<host>:~/Documents/thisfolderexists filevariable=""
<host>:~/Documents/thisfolderexists [ -e $pathtofile/$filevariable ]; echo $?
0
O que? É suposto retornar com um erro ... E este é o começo da história de como toda a pasta foi excluída por acidente
Uma alternativa poderia ser testar especificamente o que entendemos ser um 'arquivo'
<host>:~/Documents/thisfolderexists filevariable="filesexists.json"
<host>:~/Documents/thisfolderexists test -f $pathtofile/$filevariable; echo $?
0
Portanto, o arquivo existe ...
<host>:~/Documents/thisfolderexists filevariable=""
<host>:~/Documents/thisfolderexists test -f $pathtofile/$filevariable; echo $?
1
Portanto, este não é um arquivo e, talvez, não desejemos excluir esse diretório inteiro
man test
tem o seguinte a dizer:
-b FILE
FILE exists and is block special
-c FILE
FILE exists and is character special
-d FILE
FILE exists and is a directory
-e FILE
FILE exists
-f FILE
FILE exists and is a regular file
...
-h FILE
FILE exists and is a symbolic link (same as -L)