Tar

Tar:僅提取文件(不是子目錄)

  • January 19, 2021

如何僅從tar 存檔中的目錄中提取文件?我需要提取目錄中的所有文件,而不是特定文件。例如,使用此結構的 tar 存檔:

wordpress
--wp-admin
--wp-content
--wp-includes
--index.php
--license.txt
--readme.html

我只想提取 wordpress 目錄中的 3 個(或更多)文件,而不是子目錄。

請注意,我可以在此站點上找到的其他解決方案是關於提取特定文件的。我的問題是關於提取所有文件。

除非我可以對目錄名和文件名的格式做出假設,否則我找不到任何方法來提取特定級別的文件,而無需同時提取同一級別的(空)目錄。(如果文件名包含點但目錄不包含,那麼另一個答案就足夠了。)

考慮370358.tar這個內容

wordpress/
wordpress/index.php
wordpress/license.txt
wordpress/readme.html
wordpress/wp-admin/
wordpress/wp-admin/admin.php
wordpress/wp-content/
wordpress/wp-content/2021/
wordpress/wp-content/2021/01/
wordpress/wp-content/2021/01/19/
wordpress/wp-content/2021/01/19/today.txt
wordpress/wp-content/content.txt
wordpress/wp-content/here.txt
wordpress/wp-content/some.txt
wordpress/wp-includes/

wordpress/*您可以像這樣提取匹配的文件

tar xf /tmp/370358.tar --wildcards --exclude '*/*/*' && rmdir */* 2>/dev/null

ls -R wordpress
wordpress:
index.php  license.txt  readme.html

注意尾隨rmdir. tar即使生成的目錄是空的,我們也不能告訴跳過目錄創建,所以我們只是在之後刪除它們。

如果您實際上不希望wordpress目錄包含在提取中,

tar xf /tmp/370358.tar --strip-components 1 --wildcards --exclude '*/*/*' && rmdir * 2>/dev/null

ls -R
.:
index.php  license.txt  readme.html

引用自:https://unix.stackexchange.com/questions/370358