我需要创建产生特殊的“档案”一个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命令。 谢谢。 家伙。