如何查找特定文件類型並對其進行壓縮?

如何查找特定文件類型並對其進行壓縮?

看來我有問題了。我的當前目錄中有一些不同的文件類型,我只想柏油.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,但沒有任何效果。

那麼,我是否完全輸入了錯誤的命令,或者我錯過了什麼?

答案1

您的兩種方法都接近有效,但每種方法都有一個明顯的問題。

在第一種方法中,您嘗試將文件列表透過管道傳輸到tar.如果你想tar從標準輸入讀取文件列表,那麼你必須使用-T/--files-from-選項,例如

find -name '*.png' -print0 | tar -cvf backup.tar --null -T - 

如需參考,請參閱官方文件:

筆記:使用-print0--null標誌應確保它也可以處理包含空格的檔案名稱。

在第二種方法中,您嘗試執行tarvia xargs,但您使用的是「建立」選項(--create/ -c)。如果您在 for 迴圈中或在 for 迴圈中使用「create」選項xargs,那麼它將在每次迭代後覆寫存檔。相反,嘗試使用「追加」選項 ( -a/ --append) 或「更新」選項 ( -u/ --update),例如:

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

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

無論哪種方式,完成後您都可以使用「清單」選項 ( --list/ -t) 查看存檔的內容並驗證一切是否如預期運作:

tar tf backupp.tar

答案2

您可以簡單地使用通配符

tar -cvf backup.tar *.png

或透過使用find

find -name "*.png" | tar -cvf backup.tar -T -

-T選項從 FILE 取得檔案名,在本例中為 stdin-

相關內容