有一个小项目要做。我需要编写一个可用于连接目录内容的自解压存档脚本,以便可以直接从命令行通过电子邮件发送它们。
我必须编写一个 shell 脚本,它将捆绑文件和/或目录列表并将其内容输出到标准输出。如果有目录,那么它将递归遍历每个子目录。如果文件不是 ASCII(如果是二进制文件),只需对其执行 uuencode。
推荐的方法是用“X”标记文件每一行的开头:
X contents
X contents
X contents
这样,sed 可用于提取文件的内容。
输出应该是这样的:
>ls
ping README.txt testsubdir
>cd testsubdir/
>ls
recursive_test.txt
> ./arch.sh ../testdir/ > bundle
head bundle
.
.
# This SHAR archive contains the following files
# testdir
if test -f testdir
then
echo "That would clobber testdir!"
> mkdir archtest
> cd archtest
> mv ../bundle .
>ls
bundle
> sh bundle
X - ping
-rw-rw-r-- 1 erik joe 54332 Oct 5 10:19 ping
X - README.txt
.............(same pattern)............. README.txt
X - recursive_test.txt
........................................ recursive_test.txt
> ls
bundle testdir
(工作目录为 testdir)
我们需要先检查它是文件还是目录,如果是目录,就往下走。如果它是一个文件,如果它是一个二进制文件,我们必须对其执行 uuencode。然后使用 sed 提取内容。
问题是我不太了解我在每个步骤和顺序上需要做的确切事情。我知道如何检查文件类型以及如何检查文件是否为二进制文件,但不知道如何在每个文件上递归执行它并沿着子目录树对所有文件执行测试。而且我不知道如何添加“X”以及如何使用命令sed来获取X标记的内容。
请给我一些可靠的例子或提示,以便我可以开始并根据它们开始工作。非常感谢。