2013-10-14 76 views
1

我需要创建一个生成特殊“归档”的shell程序。这些存档也将是shell脚本,以便它们可以用“sh”执行。归档重新生成shell脚本

比方说,我有这样一些目录结构:

mydir 
+- file.txt 
    +- mysubdir 
    +- foo.txt 

file.txt的包含 “Lorem存有” 和foo.txt的含有 “富巴”。

然后执行归档程序:

$ arch.sh MYDIR> bundle.sh

应该生成一个名为 “bundle.sh” 这可能看起来像这样的文件:

if [ \! -d mydir ] ; then 
mkdir mydir 
cd mydir 
if [ -f file.txt ] ; then 
touch file.txt 
echo "lorem ipsum" >> file.txt 
fi 
if [ \! -d mysubdir ] ; then 
mkdir mysubdir 
cd mysubdir 
if [ -f foo.txt ] ; then 
    touch foo.txt 
    echo "foo bar" >> foo.txt 
fi 
fi 
fi 

所以,基本上,如果你要执行这个捆绑脚本,那么你最终会得到与生成捆绑包时完全相同的目录结构和文件内容。现在,只需要编写一个迭代所有文件和目录的 程序,并为每个文件和目录创建合适的输出即 。对于文本文件,您可以使用sed将它们处理为 ,以将文本文件中的每一行转换为shell命令。 例如,如果该文件是这样的:

Foo 
Bar 
Baz 
Goo 

然后,你可以生成以下shell命令:

echo "Foo" >> example.txt 
echo "Bar" >> example.txt 
echo "Baz" >> example.txt 
echo "Goo" >> example.txt 

对于二进制文件,你应该使用“UUENCODE”或者你也可以使用 “base64”,例如当你有一个二进制文件“file.bin”然后执行 以下命令输出一个shell脚本,重新创建二进制文件:

base64 file.bin | sed 's/.*/echo\ \0 >> file.txt/g' 
echo "base64 -d file.txt > file.bin" 
echo "rm file.txt" 
这样

所以,我可以通过电子邮件发送bundle.sh命令到朋友,然后当他在他的机器上执行bundle.sh时,他将生成与mydir完全相同的目录结构。

我想知道如何执行遍历遍历目录以及如何获取每个文件的名称以及如何将我生成的所有shell命令捆绑到bundle.sh。谢谢。家伙。

+0

是它创建'.tar'文件的选项,并将其包括在你的脚本? –

+2

您是否真的需要编写这个程序(也许是作业),还是只需要生成这样的脚本?你基本上描述了'shar'工具。 – chepner

+0

这是一个任务,我需要生成这个脚本,但为了这样做,我需要另一个脚本来获取结构和内容信息。关于我将打包的目录。谢谢 –

回答

1

使用makeself

$ cd /path/to/dir 
$ ls 
main.sh dir1 dir2 dir3 
$ makeself . ../bundle.run "Creating a bundle with makeself" ./main.sh 

main.sh是主要的脚本。该包将包含完整的递归目录和主脚本。

要运行包:

chmod +x bundle.run 
./bundle.run 
+0

虽然不太了解你的代码,多谢多谢 –

+0

你还读过我发布的链接http://megastep.org/makeself/吗? –