歡迎光臨
每天分享高質量文章

如何找出並打包檔案成 tar 包 | Linux 中國

我想找出所有的 *.doc 檔案並將它們建立成一個 tar 包,然後儲存在 /nfs/backups/docs/file.tar 中。
— Vivek Gite


本文導航
編譯自 | https://www.cyberciti.biz/faq/linux-unix-find-tar-files-into-tarball-command/ 
 作者 | Vivek Gite
 譯者 | geekpi

Q:我想找出所有的 *.doc 檔案並將它們建立成一個 tar 包,然後儲存在 /nfs/backups/docs/file.tar 中。是否可以在 Linux 或者類 Unix 系統上查詢並 tar 打包檔案?

find 命令用於按照給定條件在目錄層次結構中搜索檔案。tar 命令是用於 Linux 和類 Unix 系統建立 tar 包的歸檔工具。

How to find and tar files on linux unix

讓我們看看如何將 tar 命令與 find 命令結合在一個命令列中建立一個 tar 包。

Find 命令

語法是:

  1. find /path/to/search -name "file-to-search" -options

  2. ## 找出所有 Perl(*.pl)檔案 ##

  3. find $HOME -name "*.pl" -print

  4. ## 找出所有 *.doc 檔案 ##

  5. find $HOME -name "*.doc" -print

  6. ## 找出所有 *.shshell 指令碼)並執行 ls -l 命令 ##

  7. find . -iname "*.sh" -exec ls -l {} +

最後一個命令的輸出示例:

  1. -rw-r--r-- 1 vivek vivek 1169 Apr  4  2017 ./backups/ansible/cluster/nginx.build.sh

  2. -rwxr-xr-x 1 vivek vivek 1500 Dec  6 14:36 ./bin/cloudflare.pure.url.sh

  3. lrwxrwxrwx 1 vivek vivek   13 Dec 31  2013 ./bin/cmspostupload.sh -> postupload.sh

  4. lrwxrwxrwx 1 vivek vivek   12 Dec 31  2013 ./bin/cmspreupload.sh -> preupload.sh

  5. lrwxrwxrwx 1 vivek vivek   14 Dec 31  2013 ./bin/cmssuploadimage.sh -> uploadimage.sh

  6. lrwxrwxrwx 1 vivek vivek   13 Dec 31  2013 ./bin/faqpostupload.sh -> postupload.sh

  7. lrwxrwxrwx 1 vivek vivek   12 Dec 31  2013 ./bin/faqpreupload.sh -> preupload.sh

  8. lrwxrwxrwx 1 vivek vivek   14 Dec 31  2013 ./bin/faquploadimage.sh -> uploadimage.sh

  9. -rw-r--r-- 1 vivek vivek  778 Nov  6 14:44 ./bin/mirror.sh

  10. -rwxr-xr-x 1 vivek vivek  136 Apr 25  2015 ./bin/nixcraft.com.301.sh

  11. -rwxr-xr-x 1 vivek vivek  547 Jan 30  2017 ./bin/paypal.sh

  12. -rwxr-xr-x 1 vivek vivek  531 Dec 31  2013 ./bin/postupload.sh

  13. -rwxr-xr-x 1 vivek vivek  437 Dec 31  2013 ./bin/preupload.sh

  14. -rwxr-xr-x 1 vivek vivek 1046 May 18  2017 ./bin/purge.all.cloudflare.domain.sh

  15. lrwxrwxrwx 1 vivek vivek   13 Dec 31  2013 ./bin/tipspostupload.sh -> postupload.sh

  16. lrwxrwxrwx 1 vivek vivek   12 Dec 31  2013 ./bin/tipspreupload.sh -> preupload.sh

  17. lrwxrwxrwx 1 vivek vivek   14 Dec 31  2013 ./bin/tipsuploadimage.sh -> uploadimage.sh

  18. -rwxr-xr-x 1 vivek vivek 1193 Oct 18  2013 ./bin/uploadimage.sh

  19. -rwxr-xr-x 1 vivek vivek   29 Nov  6 14:33 ./.vim/plugged/neomake/tests/fixtures/errors.sh

  20. -rwxr-xr-x 1 vivek vivek  215 Nov  6 14:33 ./.vim/plugged/neomake/tests/helpers/trap.sh

Tar 命令

建立 /home/vivek/projects 目錄的 tar 包[1],執行:

  1. $ tar -cvf /home/vivek/projects.tar /home/vivek/projects

結合 find 和 tar 命令

語法是:

  1. find /dir/to/search/ -name "*.doc" -exec tar -rvf out.tar {} \;

或者

  1. find /dir/to/search/ -name "*.doc" -exec tar -rvf out.tar {} +

例子:

  1. find $HOME -name "*.doc" -exec tar -rvf /tmp/all-doc-files.tar "{}" \;

或者

  1. find $HOME -name "*.doc" -exec tar -rvf /tmp/all-doc-files.tar "{}" +

這裡,find 命令的選項:

◈ -name "*.doc":按照給定的樣式/標準查詢檔案。在這裡,在 $HOME 中查詢所有 *.doc 檔案。
◈ -exec tar ... :對 find 命令找到的所有檔案執行 tar 命令。

這裡,tar 命令的選項:

◈ -r:將檔案追加到歸檔末尾。引數與 -c 選項具有相同的含義。
◈ -v:詳細輸出。
◈ -f out.tar : 將所有檔案追加到 out.tar 中。

也可以像下麵這樣將 find 命令的輸出透過管道輸入到 tar 命令中:

  1. find $HOME -name "*.doc" -print0 | tar -cvf /tmp/file.tar --null -T -

傳遞給 find 命令的 -print0 選項處理特殊的檔案名。--null 和 -T 選項告訴 tar 命令從標準輸入/管道讀取輸入。也可以使用 xargs 命令:

  1. find $HOME -type f -name "*.sh" | xargs tar cfvz /nfs/x230/my-shell-scripts.tgz

有關更多資訊,請參閱下麵的 man 頁面:

  1. $ man tar

  2. $ man find

  3. $ man xargs

  4. $ man bash


作者簡介:

作者是 nixCraft 的創造者,是一名經驗豐富的系統管理員,也是 Linux 作業系統/Unix shell 指令碼培訓師。他曾與全球客戶以及 IT、教育、國防和太空研究以及非營利部門等多個行業合作。在 Twitter、Facebook 和 Google+ 上關註他。


via: https://www.cyberciti.biz/faq/linux-unix-find-tar-files-into-tarball-command/

作者:Vivek Gite[3] 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

LCTT 譯者

geekpi ? ?
共計翻譯:640 篇
貢獻時間:1551 天


推薦文章

< 左右滑動檢視相關文章 >

點選圖片、輸入文章 ID 或識別二維碼直達

贊(0)

分享創造快樂