Search code examples
bashappendecho

write a file, append if it exists otherwise create in bash


Im trying to write a file with the content of a variable, but if the file doesnt exist create it:

So far i got this:

echo "$Logstring" >> $fileLog

What im missing because when the file doesnt exist theres an error. Is an if condition necessary?


Solution

  •    #! /bin/bash
       VAR="something to put in a file"
       OUT=$1
       if [ ! -f "$OUT" ]; then
           mkdir -p "`dirname \"$OUT\"`" 2>/dev/null
       fi
       echo $VAR >> $OUT
    
       # the important step here is to make sure that the folder for the file exists
       # and create it if it does not. It will remain silent if the folder exists.
    

    $ sh out hello/how/are/you/file.out
    geee: ~/src/bash/moo
    $ sh out hello/how/are/you/file.out
    geee: ~/src/bash/moo
    $ sh out another/file/lol.hmz
    geee: ~/src/bash/moo
    $ find . 
    .
    ./out
    ./another
    ./another/file
    ./another/file/lol.hmz
    ./hello
    ./hello/how
    ./hello/how/are
    ./hello/how/are/you
    ./hello/how/are/you/file.out
    geee: ~/src/bash/moo
    $ cat ./hello/how/are/you/file.out
    something to put in a file
    something to put in a file
    geee: ~/src/bash/moo
    $ cat ./another/file/lol.hmz 
    something to put in a file
    

    the escaped " for dirname are needed if the folder of file has spaces in the name.