Guest User

Untitled

a guest
Dec 15th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.25 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. TAR_FILE="$1"
  4. shift
  5.  
  6. TMP_ROOT="/dev/shm" # ...or /tmp
  7. TMP_DIR="$(mktemp -d "$TMP_ROOT/xargs-tar-XXXXXX")"
  8. UNTAR_DIR="$TMP_DIR/untar"
  9. FILE_LIST="$TMP_DIR/files-list"
  10. EXEC_FILE="$TMP_DIR/exec-file"
  11.  
  12. mkdir -p "$UNTAR_DIR"
  13. mkfifo "$FILE_LIST"
  14.  
  15. (
  16. # single quotes for user's command and args
  17. for i in "$@"; do
  18. echo -n "'$i' "
  19. done
  20. echo '"$@"'
  21. echo 'rm "$@"'
  22. ) > "$EXEC_FILE"
  23. chmod u+x "$EXEC_FILE"
  24.  
  25. # Background untar. Write file list (zero terminated, no directories) to named
  26. # pipe. The output is one line delayed to make sure we print only finished file
  27. # names.
  28. (
  29. tar -v -C "$UNTAR_DIR" -xf "$TAR_FILE"
  30. | awk 'BEGIN {last = "";}
  31. !//$/ {if (last != "") print last; last=$0;}
  32. END {if (last != "") print last;}'
  33. | tr 'n' ''
  34. ) > "$FILE_LIST" &
  35.  
  36. cd "$UNTAR_DIR"
  37. xargs --null -r sh "$EXEC_FILE" < "$FILE_LIST"
  38.  
  39. rm -rf "$TMP_DIR"
  40.  
  41. ./xargs-tar palemoon.tar.bz2 wc -l
  42. 546 palemoon/libsoftokn3.so
  43. 1437 palemoon/libnss3.so
  44. [...]
  45. 267 palemoon/libnssutil3.so
  46. 220 palemoon/libsmime3.so
  47. 6 palemoon/defaults/pref/channel-prefs.js
  48. 379727 total
  49.  
  50. tar -xf palemoon.tar.bz2
  51. find palemoon -type f -print0 | xargs -0 wc -l
  52. rm -rf palemoon
Add Comment
Please, Sign In to add comment