Como fazer com que os anexos aos arquivos falhem se o arquivo ainda não existir?

2

Por exemplo

echo Something >> SomeFile

Eu quero que esse acréscimo funcione somente se SomeFile já existir.

Agora estou usando o seguinte:

if [ -e SomeFile ]; then 
    echo Something >> SomeFile
fi; 

Mas deve haver uma condição de corrida aqui. Durante a avaliação da condição if SomeFile pode existir. Uma alternância de contexto acontece entre a condição if e o append. Alguns outros aplicativos são executados, o que remove SomeFile . Nesse caso, o acréscimo criaria SomeFile .

Eu preciso da solução para trabalhar tanto com o bsd sed quanto com o gnu sed.

É muito simples fazer isso em python com os.open e < href="https://docs.python.org/2/library/os.html#os.O_APPEND"> O_APPEND

$ rm SomeFile
$ python -c "import os; print(os.open(\"SomeFile\",os.O_APPEND))"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
OSError: [Errno 2] No such file or directory: 'SomeFile'
$ touch SomeFile
$ python -c "import os; print(os.open(\"SomeFile\",os.O_APPEND))"
3
    
por Hakan Baba 18.11.2017 / 23:20

1 resposta

1

Acho que isso deve ser o que você quer:

sed -i '' -e '$a\
Something\
' SomeFile

Eu fiz isso com o mac osx / bsd sed, então você pode remover a parte -i '' . Isso falhará se SomeFile não existir, mas uma ressalva para isso é que ele também falhará se o arquivo existir e for 0 bytes, esperamos que isso não seja um problema para você.

    
por 18.11.2017 / 23:58