Linux

如何找到特定的文件類型並將它們 tar?

  • November 26, 2017

看來我有問題了。我的目前目錄中有一些不同的文件類型,我只想壓縮****.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應確保這也處理包含空格的文件名。

在您的第二種方法中,您嘗試通過執行tarxargs但您使用的是“創建”選項(--create/ -c)。如果xargs在 for 循環中或在 for 循環中使用“create”選項,那麼它將在每次迭代後覆蓋存檔。相反,請嘗試使用“追加”選項(-a/ --append)或“更新”選項(-u/ --update),例如:

find -name "*.png" -exec tar -uvf backupp.tar {} \;

這將在每次迭代後將文件附加到存檔而不是覆蓋它。

無論哪種方式,一旦完成,您可以使用“列表”選項 ( --list/ -t) 查看存檔的內容並驗證一切是否按預期工作:

tar tf backupp.tar

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