我的bash fu不应该是它。
我想创建一个小批量脚本,它将目录列表复制到一个新的zip文件中。
我可以考虑(至少)两种方式来证明文件列表:
从文件中读取(比如config.txt)。该文件将包含要压缩的目录列表OR
将列表直接硬编码到bash脚本中
第一种选择似乎更直接(虽然不那么优雅)。
我面临的两个问题是我不确定如何执行以下操作:
有人可以提出几行建议,我该怎么做?
BTW,我在Ubuntu 10.0.4上运行
答案 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