我有一个具有以下内容的tar文件:
[vboxhain:/tmp/extract]$ tar tvf ../mein.tar
drwxr-xr-x user/user 0 2019-01-14 15:31 ./
drwxr-xr-x user/user 0 2019-01-14 15:30 ./dir2/
-rw-r--r-- user/user 0 2019-01-14 15:30 ./dir2/file21.jpg
-rw-r--r-- user/user 0 2019-01-14 15:29 ./file1.jpg
drwxr-xr-x user/user 0 2019-01-14 15:30 ./dir1/
drwxr-xr-x user/user 0 2019-01-14 15:30 ./dir1/dir11/
-rw-r--r-- user/user 0 2019-01-14 15:30 ./dir1/dir11/file111.jpg
-rw-r--r-- user/user 0 2019-01-14 15:30 ./dir1/dir11/file112.jpg
drwxr-xr-x user/user 0 2019-01-14 15:30 ./dir1/dir21/
-rw-r--r-- user/user 0 2019-01-14 15:30 ./dir1/dir21/file122.jpg
-rw-r--r-- user/user 0 2019-01-14 15:30 ./dir1/dir21/file121.jpg
-rw-r--r-- user/user 0 2019-01-14 15:30 ./dir1/file11.jpg
它包含几个子目录,这些子目录可能包含也可能不包含jpg文件。文件名并不总是相同,但我知道目录“ dir1”中只有一个jpg文件。我只想提取此文件,不提取其他jpg文件,既不提取dir2,也不提取dir1 / dir *。
到目前为止我尝试过的是
[vboxhain:/tmp/extract]$ tar -x -f ../mein.tar --wildcards 'dir1/*.jpg'
tar: dir1/*.jpg: Not found in archive
tar: Exiting with failure status due to previous errors
或
[vboxhain:/tmp/extract]$ tar -x -f ../mein.tar --wildcards --wildcards-match-slash 'dir1/*.jpg'
tar: dir1/*.jpg: Not found in archive
tar: Exiting with failure status due to previous errors
如果我使用
[vboxhain:/tmp/extract]$ tar -x -f ../mein.tar --wildcards "*.jpg"
然后我得到了所有jpg文件,这不是我想要的。
鉴于我不知道该文件的确切名称,有人知道如何在dir1中提取jpg文件吗?我期望的是在子目录dir1中得到一个文件,输出应该是'dir1 / file11.jpg'。
答案 0 :(得分:1)
我将为您提供在UNIX时代使用的规范方法:
tar xf ../mein.tar `tar tf ../mein.tar|grep -E dir1/[a-zA-Z0-9]+.jpg$`
这将独立于Linux或UNIX以及tar版本
这是我的考试:
[...] ➤ tar tvf ../tar.tar
drwxr-xr-x ....... 0 2019-01-15 10:33:31 dir1/
drwxr-xr-x ....... 0 2019-01-15 10:21:14 dir1/dir11/
-rw-r--r-- ....... 0 2019-01-15 10:21:14 dir1/dir11/file111.jpg
-rw-r--r-- ....... 0 2019-01-15 10:21:14 dir1/dir11/file112.jpg
drwxr-xr-x ....... 0 2019-01-15 10:21:14 dir1/dir21/
-rw-r--r-- ....... 0 2019-01-15 10:21:14 dir1/dir21/file121.jpg
-rw-r--r-- ....... 0 2019-01-15 10:21:14 dir1/dir21/file122.jpg
-rw-r--r-- ....... 0 2019-01-15 10:21:16 dir1/file11.jpg
drwxr-xr-x ....... 0 2019-01-15 10:21:02 dir2/
-rw-r--r-- ....... 0 2019-01-15 10:21:14 dir2/file21.jpg
-rw-r--r-- ....... 0 2019-01-15 10:21:14 file1.jpg
[....] ➤ tar tf ../tar.tar|grep -E dir1/[a-zA-Z0-9]+.jpg$
dir1/file11.jpg
答案 1 :(得分:0)
您需要像这样使用 --no-anchored
:
$ tar -xf ../mein.tar --wildcards --no-anchored "dir1/*.jpg"
根据man page:
<块引用>--anchored
Patterns match file name start.
--no-anchored
Patterns match after any / (default for exclusion).
--wildcards
Use wildcards (default for exclusion).
--no-wildcards
Verbatim string matching.
答案 2 :(得分:-1)
这有效
tar -xf mein.tar dir1/*.jpg