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

xzv2uavs  于 2023-01-05  发布在  Shell
关注(0)|答案(6)|浏览(214)

我的打击乐不是它应该的样子。
我想创建一个小批处理脚本,它将复制目录列表到一个新的zip文件。
我能想到的提供文件列表的方法(至少)有两种:
1.从一个文件(比如config.txt)中读取。该文件将包含要压缩的目录列表

1.将列表直接硬编码到bash脚本中
第一种选择似乎更直接(尽管不那么优雅)。
我面临的两个问题是我不确定如何做到以下几点:

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

有人能用几句话来建议我如何做到这一点吗?
顺便说一句,我运行的是Ubuntu 10.0.4

vyswwuz2

vyswwuz21#

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

kd3sttzy2#

创建两个文件:filelist -放置所有需要的目录(一行一个)
并创建一个简单的bash脚本:

#!/bin/bash

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

rn0zuynd3#

您可以导出一个变量,例如DIRECTORIES=“DIR 1 DIR 2 DIR 3...”,并且在脚本中需要使用变量tar czvf $DIRECTORIES

vlf7wbxs

vlf7wbxs4#

当你写文件名或目录名到文件时,只要使用空字节作为分隔符。这样你就不用担心文件名中的空格,换行符等!

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
ogsagwnx

ogsagwnx5#

如果您正在寻找压缩目录,下面的命令可以帮助您。
pbzip2使用并行实现压缩目录

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

snvhrwxg6#

我经常用途:

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

相关问题