如何查找并将tar文件压缩为tar包

时间:2020-01-09 10:42:14  来源:igfitidea点击:

如何找到所有文档文件* .doc并创建这些文件的压缩文件,并将其存储在/nfs/backups/docs/file.tar中。
是否可以在Linux或者类似Unix的系统上查找和tar文件?

find命令用于根据给定条件在目录层次结构中搜索文件。

tar命令是用于Linux和类Unix系统的创建tar包的归档实用程序。
让我们看看如何结合使用tar命令和find命令在一个命令行选项中创建tar包。

find命令语法

语法为:

find /path/to/search -name "file-to-search" -options
## find all Perl (*.pl) files ##
find $HOME -name "*.pl" -print
## find all *.doc files ##
find $HOME -name "*.doc" -print
## find all *.sh (shell scripts) and run ls -l command on it ##
find . -iname "*.sh" -exec ls -l {} +

最后一条命令的输出示例:

-rw-r--r-- 1 Hyman Hyman 1169 Apr  4  2016 ./backups/ansible/cluster/nginx.build.sh
-rwxr-xr-x 1 Hyman Hyman 1500 Dec  6 14:36 ./bin/cloudflare.pure.url.sh
lrwxrwxrwx 1 Hyman Hyman   13 Dec 31  2013 ./bin/cmspostupload.sh -> postupload.sh
lrwxrwxrwx 1 Hyman Hyman   12 Dec 31  2013 ./bin/cmspreupload.sh -> preupload.sh
lrwxrwxrwx 1 Hyman Hyman   14 Dec 31  2013 ./bin/cmssuploadimage.sh -> uploadimage.sh
lrwxrwxrwx 1 Hyman Hyman   13 Dec 31  2013 ./bin/faqpostupload.sh -> postupload.sh
lrwxrwxrwx 1 Hyman Hyman   12 Dec 31  2013 ./bin/faqpreupload.sh -> preupload.sh
lrwxrwxrwx 1 Hyman Hyman   14 Dec 31  2013 ./bin/faquploadimage.sh -> uploadimage.sh
-rw-r--r-- 1 Hyman Hyman  778 Nov  6 14:44 ./bin/mirror.sh
-rwxr-xr-x 1 Hyman Hyman  136 Apr 25  2014 ./bin/theitroad.com.301.sh
-rwxr-xr-x 1 Hyman Hyman  547 Jan 30  2016 ./bin/paypal.sh
-rwxr-xr-x 1 Hyman Hyman  531 Dec 31  2013 ./bin/postupload.sh
-rwxr-xr-x 1 Hyman Hyman  437 Dec 31  2013 ./bin/preupload.sh
-rwxr-xr-x 1 Hyman Hyman 1046 May 18  2016 ./bin/purge.all.cloudflare.domain.sh
lrwxrwxrwx 1 Hyman Hyman   13 Dec 31  2013 ./bin/tipspostupload.sh -> postupload.sh
lrwxrwxrwx 1 Hyman Hyman   12 Dec 31  2013 ./bin/tipspreupload.sh -> preupload.sh
lrwxrwxrwx 1 Hyman Hyman   14 Dec 31  2013 ./bin/tipsuploadimage.sh -> uploadimage.sh
-rwxr-xr-x 1 Hyman Hyman 1193 Oct 18  2013 ./bin/uploadimage.sh
-rwxr-xr-x 1 Hyman Hyman   29 Nov  6 14:33 ./.vim/plugged/neomake/tests/fixtures/errors.sh
-rwxr-xr-x 1 Hyman Hyman  215 Nov  6 14:33 ./.vim/plugged/neomake/tests/helpers/trap.sh

Tar命令语法

要创建/home/Hyman/projects目录的tar包,请运行:

$ tar -cvf /home/Hyman/projects.tar /home/Hyman/projects

结合find和tar命令

语法为:

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

或者

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

例如:

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

或者

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

其中:找到命令选项:

  • -name" * .doc":根据给定的模式/标准查找文件。在这种情况下,请找到$HOME中的所有* .doc文件。
  • -exec tar ...:对由find命令找到的所有文件执行tar命令。

其中:tar命令选项:

  • -r:将文件追加到归档文件的末尾。参数的含义与-c选项的含义相同。
  • -v:详细输出
  • -f:out.tar:将所有文件追加到out.tar文件。

也可以将find命令的输出通过管道传递到tar命令,如下所示:

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

传递给find命令的-print0选项处理特殊文件名。

null和-T选项告诉tar命令从stdin/pipe读取其输入。
也可以使用xargs命令:

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