gzipping一组目录并创build一个tar压缩文件

我的bash fu不是它应该的。

我想创build一个小批处理脚本,将复制一个目录列表到一个新的zip文件。

至less有两种方法可以考虑certificate文件列表:

  1. 从文件读取(比如说config.txt)。 该文件将包含要压缩的目录列表

  2. 硬编码列表直接进入bash脚本

第一个选项似乎更直接(虽然不太优雅)。

我面临的两个问题是我不知道如何做到以下几点:

  • 将目录列表提供给shell脚本
  • 迭代目录列表

可以有人build议在几行,我怎么能做到这一点?

顺便说一句,我在Ubuntu 10.0.4上运行

您可以在命令行上创建一个gzipped tar,如下所示:

tar czvf mytar.tar.gz dir1 dir2 .. dirN 

如果你想在bash脚本中这样做,并将目录作为参数传递给脚本,那么这些参数将以$@结尾。 那么你有:

 tar czvf mytar.tar.gz "$@" 

如果这是在一个脚本(让我们说myscript.sh ),你可以这样称呼:

 ./myscript.sh dir1 dir2 .. dirN 

如果你想从列表中读取(你的选项1),你可以这样做(如果目录名称中有空格,这不起作用):

 tar czvf mytar.tar.gz $(<config.txt) 

创建两个文件:filelist – 放置所有需要的目录(一行一个)

并创建一个简单的bash脚本:

  #!/bin/bash for DIR in `cat filelist` do if [ -d $DIR ] then echo $DIR fi done 

你可以导出一个像DIRECTORIES =“DIR1 DIR2 DIR3 ….”的变量,并且在脚本中需要使用像tar czvf $ DIRECTORIES

将文件/目录名写入文件时,只需使用空字节作为分隔符。 这样你就不用担心文件名中的空格,换行符等了!

 printf "%s\000" */ > listOfDirs.txt # alternative: find ... -print0 while IFS="" read -r -d '' dir; do command ls -1abd "$dir"; done < listOfDirs.txt tar --null -czvf mytar.tar.gz --files-from listOfDirs.txt 

如果您正在寻找压缩目录,以下命令可以帮助。

pbzip2使用并行实现来压缩目录

 tar cf <outputfile_name> --use-compress-prog=pbzip2 <directory_name>