归档再生shell脚本(archive regenerating shell script)

2019-10-18 18:14发布

我需要创建产生特殊的“档案”一个shell程序。 这些档案也将shell脚本,让他们可以用“sh”的执行。

比方说,我有一个像一些目录结构:

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”或者你也可以当你有一个二进制文件“file.bin”,然后执行以下命令输出一个shell脚本,重新创建二进制文件使用“的base64”,例如:

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。

我想知道怎么做递归遍历目录,以及如何获得每个文件的名称和如何捆绑一切,我产生bundle.sh的shell命令。 谢谢。 家伙。

Answer 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


文章来源: archive regenerating shell script