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
./
vonfind
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 als7z 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 wiepxz
(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 anxz
undlzip
ran, und ist schneller als beide. (factor x4 schneller als lzip in diesem fall)edit: honorary mention ist
bzip2
oder besser parallelpbzip2
. 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 decompresstar 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 decompresstar x --zstd -f
zu nehmenEs gibt eine GUI (für linux und win) https://github.com/mcmilk/7-Zip-zstd