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

时间:2010-07-27 06:11:17

标签: bash ubuntu shell gzip

我的bash fu不应该是它。

我想创建一个小批量脚本,它将目录列表复制到一个新的zip文件中。

我可以考虑(至少)两种方式来证明文件列表:

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

  2. 将列表直接硬编码到bash脚本中

  3. 第一种选择似乎更直接(虽然不那么优雅)。

    我面临的两个问题是我不确定如何执行以下操作:

    • 提供shell脚本的目录列表
    • 遍历目录列表

    有人可以提出几行建议,我该怎么做?

    BTW,我在Ubuntu 10.0.4上运行

6 个答案:

答案 0 :(得分:29)

您可以在命令行上创建一个gzip压缩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)

答案 1 :(得分:0)

创建两个文件: filelist - 放置所有必需的目录(一个在单行上)

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

    #!/bin/bash


for DIR in `cat filelist` 
do 
    if [ -d $DIR ] 
    then
        echo $DIR
    fi
done

答案 2 :(得分:0)

您可以导出变量,例如DIRECTORIES =“DIR1 DIR2 DIR3 ....” 在脚本中你需要使用变量 tar czvf $ DIRECTORIES

答案 3 :(得分:0)

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

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 

答案 4 :(得分:0)

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

  

pbzip2使用并行实现压缩目录

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

答案 5 :(得分:0)

我经常使用:

tar -cv Folder1 Folder2 | gzip > Folders.tar.gz