Tar
僅 tar 文件,無目錄
我可能可以編寫一個 shell 腳本來僅查找文件,然後將列表傳遞給 tar,但我想知道 tar 中是否已經有一個內置功能允許在單個命令行中執行此操作?
例如,我找到了
--no-recursion
開關,但是當我這樣做時:tar --no-recursion -cvf mydir.tar mydir
它只歸檔目錄中條目的名稱(包括子目錄!),但不歸檔任何文件。
我也試過:
tar --no-recursion -cvf mydir.tar mydir/*
但是,雖然它只歸檔文件,但它也會歸檔子目錄的名稱。
有沒有辦法只告訴 tar 文件,沒有目錄?
正如 camh 所指出的,前一個命令有一個小問題,即給定太多文件名,它會執行多次,隨後的呼叫會默默地清除之前的執行。由於我們也沒有壓縮,我們可以追加而不是覆蓋:
find mydir -maxdepth 1 -type f -print0 | xargs -0 tar Avf mydir.tar find mydir -maxdepth 1 -type f -exec tar Avf mydir.tar {} +
Iocnarz對使用
tar
’s--null
和-T
options 的回答也有效。如果您已cpio
安裝,camh使用它的答案也很好。如果您有zsh
並且不介意將它用於命令,Gilles 使用 zsh glob (*(.)
) 的答案似乎是最直接的。關鍵是
-maxdepth
選項。最終答案,適當處理空格:find mydir -maxdepth 1 -type f -print0 | xargs -0 tar cvf mydir.tar
這也應該有效:
find mydir -maxdepth 1 -type f -exec tar cvf mydir.tar {} +
當你想使用
find
withtar
時,最好的方法是使用cpio
而不是tar
。cpio
可以編寫 tar 存檔,旨在從標準輸入獲取要存檔的文件列表。find mydir -maxdepth 1 -type f -print0 | cpio -o -H ustar -0 > mydir.tar
使用
find
andcpio
是一種更加 unix-y 的方法,因為您find
可以使用它擁有的所有功能進行文件選擇,然後cpio
進行歸檔。值得學習這種簡單的用法cpio
,因為您會發現很容易解決您在嘗試時遇到的問題tar
。