看來我有問題了。我的當前目錄中有一些不同的文件類型,我只想柏油這.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
標誌應確保它也可以處理包含空格的檔案名稱。
在第二種方法中,您嘗試執行tar
via 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-