首頁 > 軟體

Linux下如何找出並打包檔案成 tar 包

2020-06-16 16:56:09

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"-execls-l {}+

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

  1. -rw-r--r--1 vivek vivek 1169Apr42017./backups/ansible/cluster/nginx.build.sh
  2. -rwxr-xr-x 1 vivek vivek 1500Dec614:36./bin/cloudflare.pure.url.sh
  3. lrwxrwxrwx 1 vivek vivek 13Dec312013./bin/cmspostupload.sh -> postupload.sh
  4. lrwxrwxrwx 1 vivek vivek 12Dec312013./bin/cmspreupload.sh -> preupload.sh
  5. lrwxrwxrwx 1 vivek vivek 14Dec312013./bin/cmssuploadimage.sh -> uploadimage.sh
  6. lrwxrwxrwx 1 vivek vivek 13Dec312013./bin/faqpostupload.sh -> postupload.sh
  7. lrwxrwxrwx 1 vivek vivek 12Dec312013./bin/faqpreupload.sh -> preupload.sh
  8. lrwxrwxrwx 1 vivek vivek 14Dec312013./bin/faquploadimage.sh -> uploadimage.sh
  9. -rw-r--r--1 vivek vivek 778Nov614:44./bin/mirror.sh
  10. -rwxr-xr-x 1 vivek vivek 136Apr252015./bin/nixcraft.com.301.sh
  11. -rwxr-xr-x 1 vivek vivek 547Jan302017./bin/paypal.sh
  12. -rwxr-xr-x 1 vivek vivek 531Dec312013./bin/postupload.sh
  13. -rwxr-xr-x 1 vivek vivek 437Dec312013./bin/preupload.sh
  14. -rwxr-xr-x 1 vivek vivek 1046May182017./bin/purge.all.cloudflare.domain.sh
  15. lrwxrwxrwx 1 vivek vivek 13Dec312013./bin/tipspostupload.sh -> postupload.sh
  16. lrwxrwxrwx 1 vivek vivek 12Dec312013./bin/tipspreupload.sh -> preupload.sh
  17. lrwxrwxrwx 1 vivek vivek 14Dec312013./bin/tipsuploadimage.sh -> uploadimage.sh
  18. -rwxr-xr-x 1 vivek vivek 1193Oct182013./bin/uploadimage.sh
  19. -rwxr-xr-x 1 vivek vivek 29Nov614:33./.vim/plugged/neomake/tests/fixtures/errors.sh
  20. -rwxr-xr-x 1 vivek vivek 215Nov614:33./.vim/plugged/neomake/tests/helpers/trap.sh

Tar 命令

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

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

結合 find 和 tar 命令

語法是:

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

或者

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

例子:

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

或者

  1. find $HOME -name "*.doc"-exectar-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"|xargstar cfvz /nfs/x230/my-shell-scripts.tgz

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

  1. $ mantar
  2. $ manfind
  3. $ manxargs
  4. $ manbash

作者簡介:

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


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

作者:Vivek Gite 譯者:geekpi 校對:wxy

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

本文永久更新連結地址http://www.linuxidc.com/Linux/2018-01/150544.htm


IT145.com E-mail:sddin#qq.com