Skip to content

Instantly share code, notes, and snippets.

@artyom
Last active May 17, 2018 16:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save artyom/926ec9c49a2077f2820053274f0b1b16 to your computer and use it in GitHub Desktop.
Save artyom/926ec9c49a2077f2820053274f0b1b16 to your computer and use it in GitHub Desktop.
GNU tar bug — tar (GNU tar) 1.30 2017-12-17 06:43
$ for i in {1..3} ; do echo sample $i ; mkdir unpack$i && tar tvf sample$i.tar && bsdtar xf sample$i.tar -C unpack$i && find unpack$i -ls ; done
sample 1
lrwxrwxrwx admin/admin 0 2018-05-17 15:27 foo -> bar
-rw-r--r-- admin/admin 6 2018-05-17 15:27 foo
263199 4 drwxr-xr-x 2 admin admin 4096 May 17 15:48 unpack1
266605 4 -rw-r--r-- 1 admin admin 6 May 17 15:27 unpack1/foo
sample 2
lrwxrwxrwx admin/admin 0 2018-05-17 15:25 foo -> /bar
-rw-r--r-- admin/admin 6 2018-05-17 15:25 foo
266606 4 drwxr-xr-x 2 admin admin 4096 May 17 15:48 unpack2
266607 4 -rw-r--r-- 1 admin admin 6 May 17 15:25 unpack2/foo
sample 3
lrwxrwxrwx admin/admin 0 2018-05-17 15:39 foo -> dir/bar
-rw-r--r-- admin/admin 6 2018-05-17 15:39 foo
266608 4 drwxr-xr-x 2 admin admin 4096 May 17 15:48 unpack3
266612 4 -rw-r--r-- 1 admin admin 6 May 17 15:39 unpack3/foo
$ for i in {1..3} ; do echo sample $i ; mkdir unpack$i && tar tvf sample$i.tar && tar xf sample$i.tar -C unpack$i && find unpack$i -ls ; done
sample 1
lrwxrwxrwx admin/admin 0 2018-05-17 15:27 foo -> bar
-rw-r--r-- admin/admin 6 2018-05-17 15:27 foo
266605 4 drwxr-xr-x 2 admin admin 4096 May 17 15:40 unpack1
266606 4 -rw-r--r-- 1 admin admin 6 May 17 15:27 unpack1/foo
sample 2
lrwxrwxrwx admin/admin 0 2018-05-17 15:25 foo -> /bar
-rw-r--r-- admin/admin 6 2018-05-17 15:25 foo
266607 4 drwxr-xr-x 2 admin admin 4096 May 17 15:40 unpack2
266608 0 lrwxrwxrwx 1 admin admin 4 May 17 15:25 unpack2/foo -> /bar
sample 3
lrwxrwxrwx admin/admin 0 2018-05-17 15:39 foo -> dir/bar
-rw-r--r-- admin/admin 6 2018-05-17 15:39 foo
266612 4 drwxr-xr-x 2 admin admin 4096 May 17 15:40 unpack3
266613 4 -rw-r--r-- 1 admin admin 6 May 17 15:39 unpack3/foo
@artyom
Copy link
Author

artyom commented May 17, 2018

On extract newer records in tar stream should by default overwrite older extracted items. In GNU tar this doesn't work if older record is a symlink which target starts with root (/).

Note how result of unpacking sample 2 differs in GNU tar case.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment