首页 文章

捆绑给定目录及其子目录下的所有文件内容

提问于
浏览
1

有一个小项目要做 . 我需要编写一个自解压归档脚本,可以用来连接目录的内容,以便可以直接从命令行通过电子邮件发送它们 .

我必须编写一个shell脚本,它将捆绑文件和/或目录列表并将其内容输出到stdout . 如果有一个目录,那么它将以递归方式遍历每个子目录 . 如果文件不是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标记的内容 .

请给我一些可靠的例子或提示,以便我可以有一个开始并开始基于它们工作 . 非常感谢 .

1 回答

  • 2

    如果shar不够,您可以使用tar archive制作自己的解决方案 .

    首先,您将制作一些自我提取脚本,如:

    #!/usr/bin/bash
    
    sed '0,/^_ARCHIVE/d' "$0" | tar xvz
    
    exit 0
    
    _ARCHIVE
    

    而且您可以通过简单的方式向其添加内容:

    tar cz your_directory >> your_sfx.sh
    

    您可以随意添加自己的提取器,总结检查,其他信息,启动安装脚本 . 它是由你决定 . 您还可以插入任何其他过滤器来修改编码 . 例如,您将使用sfx脚本中的 base64

    #!/usr/bin/bash
    
    sed '0,/^_ARCHIVE/d' "$0" | base64 -d | tar xvz
    
    exit 0
    
    _ARCHIVE
    

    并在创建命令

    tar cz your_directory | base64 >> your_sfx.sh
    

相关问题