我有一个.tar.gz文件,该文件下面有多个文件夹。每个文件夹都有多个文件,我只想从其下面的所有文件夹中提取 SNAPSHOT .jar。
我尝试使用通配符,但无济于事。例如:
tar -xf samplejars.tar.gz --wildcards "*SNAPSHOT*.jar"
samplejars.tar.gz有很多文件夹,我只想提取 SNAPSHOT .jar。我该怎么办?
注意:所有的罐子都有唯一的/不同的名称。
答案 0 :(得分:3)
我使用以下文件夹结构对其进行了测试:
reprex %>%
group_by(id, number) %>%
mutate(check = setequal(sort(unique(classification)),
sort(unique(`classification-1`))))
以下通配符掩码起作用并仅提取仅与 SNAPSHOT.jar 完全匹配而不是SNAPSHOT.jar.with.extension和ANOTHER_SNAPSHOT.jar
的文件data/
data/a
data/a/ANOTHER_SNAPSHOT.jar
data/b
data/c
data/c/SNAPSHOT.jar
data/d
data/e
data/f
data/f/SNAPSHOT.jar.with.extension
data/g
data/g/SNAPSHOT.jar
data/h
结果:
tar -xf data.tar.gz --wildcards "*/SNAPSHOT.jar"
答案 1 :(得分:0)
您可以使用所需的模式创建文件:
echo "*SNAPSHOT*.jar" > target
如果您有多种模式,则可以在目标文件中添加多行
echo "*.md" >> target
然后您可以使用--files-from开关:
tar -xf samplejars.tar.gz --files-from=filename
我通过
进行了测试data/
data/a/
data/a/ANOTHER_SNAPSHOT.jar
data/b/
data/c/
data/c/SNAPSHOT.jar
data/d/
data/e/
data/f/
data/f/SNAPSHOT.jar.with.extension
data/g/
data/g/SNAPSHOT-2.jar
data/g/SNAPSHOT.jar
data/h/
结果
data/a/ANOTHER_SNAPSHOT.jar
data/c/SNAPSHOT.jar
data/g/SNAPSHOT-2.jar
data/g/SNAPSHOT.jar
如果所有文件都具有唯一的文件名(如OP所述),则可以使用--strip-components删除文件结构
tar -xf samplejars.tar.gz --files-from=filename --strip-components 2
根据我的数据,结果是:
ANOTHER_SNAPSHOT.jar
SNAPSHOT.jar
SNAPSHOT-2.jar
因为我没有唯一的名称,所以在--strip-components步骤中覆盖了一个SNAPSHOT.jar文件。
答案 2 :(得分:0)
您可以为此使用xargs:
tar -tf data.tar.gz | grep SNAPSHOT.jar | xargs tar -xf data.tar.gz
然后,将所有文件移动到根目录
find archive_root_dir -type f -exec mv -i {} . \;