我的bash fu不是它应该的。
我想创build一个小批处理脚本,将复制一个目录列表到一个新的zip文件。
至less有两种方法可以考虑certificate文件列表:
从文件读取(比如说config.txt)。 该文件将包含要压缩的目录列表
硬编码列表直接进入bash脚本
第一个选项似乎更直接(虽然不太优雅)。
我面临的两个问题是我不知道如何做到以下几点:
可以有人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>