Backup script funktioniert nicht



  • Bitte schnelle Hilfe. Ich muss einen Ordner sichern, der mit dem Präfix abc- beginnt.

    #!/bin/bash
    to_backup=$(find ./* -maxdepth 1 -name "abc-*")
    for d in $to_backup;
    do
        fn="backup-$d-$(date +%s).zip"
        echo "$fn"
        zip -r "$fn" "$d"
    done
    ls -la
    
    

    Fehlermeldung:

    backup-./abc-1681628114.zip
    zip I/O error: No such file or directory
    
    

    Er nimmt das ./ von find noch mit...

    Einfach weglassen geht aber auch nicht, denn das sei schlechter Stil... Was tun?



  • Habe eine Möglichkeit gefunden.

    #!/bin/bash
    to_backup=$(find ./* -maxdepth 1 -name "abc-*")
    for d in $to_backup;
    do
        fn="backup-${d#./}-$(date +%s).zip"
        echo "$fn"
        zip -r "$fn" "$d"
    done
    ls -la
    
    

    geholfen hat mir: https://stackoverflow.com/a/4763159 und jetzt ist auch https://www.shellcheck.net/ zufrieden.

    Dann noch eine Frage ... zip -r ist schneller als 7z a -t7z, aber das zip-File ist fast doppelt so groß ... Welchen Kompromiss würdet ihr wählen?



  • du kannst deinem find auch einfach sagen er soll den local path wegwefen:
    find . -maxdepth 1 -name 'abc-*' -printf '%f\n'

    was compression angeht musst du halt wissen was du haben willst. wenn ich backups vom filesystem mache, ie files, folders, configs, binary data whatever, interessiert mich nicht wie lange das dauert, sondern wie gut das hinterher compressed ist. kommt ausserdem darauf an wieviele resources du waehrend dessen zur verfuegung hast. plzip (lzip) frisst gerne mal 5+GB ram, genauso wie pxz (xz). zip ist grundsaetzlich weder schnell, noch gut.
    dann kommts auch noch darauf an wie schnell du den kram wieder entpacken willst.

    Ich persoenlich benutze auf all meinen beefy servern zstd mit maximaler compression (-19) ueber alle cores (-T0). die compression kommt an xz und lzip ran, und ist schneller als beide. (factor x4 schneller als lzip in diesem fall)

    edit: honorary mention ist bzip2 oder besser parallel pbzip2. das hat eine akzeptable geschwindigkeit beim komprimieren/dekomprimieren, und kommt auf eine ebenfalls akzeptable filesize



  • @Cardiac sagte in Backup script funktioniert nicht:

    du kannst deinem find auch einfach sagen er soll den local path wegwefen:
    find . -maxdepth 1 -name 'abc-*' -printf '%f\n'

    das geht ja wieder nicht, weil ich es in eine Variable packen möchte, und nicht ausgeben...



  • ....wat?
    noch keinen kaffee gehabt?

    for d in $(find . -maxdepth 1 -name 'foo-*' -printf '%P\n'); do
      #stuff
    done
    


  • Möchte eine umfangreiche Verzeichnisstruktur mit log files (Text) und Binärdateien komprimieren, das soll schnell gehen, die Größe fällt nicht so sehr ins Gewicht, allerdings wäre etwas kleiner als zip wünschenswert. Zur Verfügung stehen 8 gb ram. Die Rohdatenmengen sind ca. 1,5 gb und mit zip ca. 300 mb und mit 7z (langsam) ca. 150 mb.



  • musst halt nen benchmark machen. xz, bzip2 und zstd sind vermutlich die compression algorithms die du vergleichen willst, zstd mit -T0 und sowohl xz als auch bzip2 in ihrer parallel variant, also pxz und pbzip2.



  • @Cardiac sagte in Backup script funktioniert nicht:

    musst halt nen benchmark machen

    Es gibt nicht zufällig ein Tool dafür, oder? 😊 Ubuntu/Debian



  • Hab einen Sieger! 🙂

    $ bash test.sh 
    
    real    3m40,771s
    user    6m36,314s
    sys     0m13,841s
    4,0K    ./test.sh
    1,8G    ./tocompress
    260M    ./compressed.bz2
    2,1G    ./
    
    $ cat test.sh 
    #!/bin/bash
    time tar c -Ipbzip2 -f compressed.bz2 tocompress/
    du -ha --max-depth=1 ./
    

    pbzip2 ist ganz gut, mit ca. 3,5 Minuten kann ich leben. zip wäre zwar noch etwas schneller, aber von der file size noch zu groß. pbzip2 ist ein Trade-off.

    Hier noch eine gute Seite dazu: https://linuxreviews.org/Comparison_of_Compression_Algorithms



  • Obwohl, ne, zstd (tar c -I"zstd -T0" -f) bekommt den Zuschlag:

    $ cat test.sh 
    #!/bin/bash
    time tar c -Ipbzip2 -f compressed1.bz2 tocompress/
    time tar c -I"zstd -19 -T0" -f compressed2.zst tocompress/
    time tar c -I"zstd -T0" -f compressed3.zst tocompress/
    du -ha --max-depth=1 ./
    
    $ bash test.sh 
    
    real    3m39,450s
    user    6m34,915s
    sys     0m13,176s
    
    real    5m34,064s
    user    10m12,053s
    sys     0m5,402s
    
    real    0m7,419s
    user    0m8,652s
    sys     0m3,349s
    213M    ./compressed2.zst
    273M    ./compressed3.zst
    4,0K    ./test.sh
    1,8G    ./tocompress
    260M    ./compressed1.bz2
    2,6G    ./
    

    bei 7,5 Sekunden kann man nix falsch machen...



  • was tooling angeht macht facebook halt schon gute sachen



  • Ach, das ist vom Zuckerberg? 🤨

    Ich hab mir nun ein Alias angelegt:

    alias tar-zstd='tar c -I"zstd -T0" -f'



  • Ich habe noch ein Problem ... wie kann ich das denn in Windows entpacken? 😞



  • keine ahnung, benutz ich nich
    ich schaetze mal tar gibts auch fuer PS, zstd musst vielleicht selbst bauen



  • Also in der Git Bash gibt es tar --use-compress-program=unzstd -xvf nicht! 7zip kann es auch nicht.

    unzstd kann nicht gefunden werden...

    Edit: Hab mir in Linux noch ein zweites Alias angelegt: alias tar-unzstd='tar -I"unzstd" -xvf'



  • https://github.com/facebook/zstd hat doch win releases?
    tar ist intelligent genug zu erkennen was es tut (meistens jedenfalls), also reicht es fuer decompress tar x --zstd -f zu nehmen



  • @Cardiac sagte in Backup script funktioniert nicht:

    https://github.com/facebook/zstd hat doch win releases?
    tar ist intelligent genug zu erkennen was es tut (meistens jedenfalls), also reicht es fuer decompress tar x --zstd -f zu nehmen

    Es gibt eine GUI (für linux und win) 😊 https://github.com/mcmilk/7-Zip-zstd


Log in to reply