Linux
如何找到特定的文件類型並將它們 tar?
看來我有問題了。我的目前目錄中有一些不同的文件類型,我只想壓縮****.png文件。我從這個開始:
find -name "*.png" | tar -cvf backupp.tar
它不起作用,因為我沒有指定哪些文件,所以看看其他人是如何做到的,我添加了 xargs:
find -name "*.png" | xargs tar -cvf backupp.tar
這次它確實起作用了,並且創建了 backupp.tar 文件,但問題就在這裡。我似乎無法提取它。每當我輸入:
tar -xvf backupp.tar
什麼都沒有發生。我嘗試過更改 chmod 和 sudo,但沒有任何讓步。
那麼,我是完全輸入了錯誤的命令還是我錯過了什麼?
您的兩種方法中的每一種都接近工作,但每種方法都有一個明顯的問題。
在您的第一種方法中,您嘗試將文件列表通過管道傳輸到
tar
. 如果您想tar
從標準輸入讀取文件列表,則必須使用-T
/--files-from
和-
選項,例如find -name '*.png' -print0 | tar -cvf backup.tar --null -T -
如需參考,請參閱官方文件:
注意:
-print0
和標誌的使用--null
應確保這也處理包含空格的文件名。在您的第二種方法中,您嘗試通過執行
tar
,xargs
但您使用的是“創建”選項(--create
/-c
)。如果xargs
在 for 循環中或在 for 循環中使用“create”選項,那麼它將在每次迭代後覆蓋存檔。相反,請嘗試使用“追加”選項(-a
/--append
)或“更新”選項(-u
/--update
),例如:find -name "*.png" -exec tar -uvf backupp.tar {} \;
這將在每次迭代後將文件附加到存檔而不是覆蓋它。
無論哪種方式,一旦完成,您可以使用“列表”選項 (
--list
/-t
) 查看存檔的內容並驗證一切是否按預期工作:tar tf backupp.tar