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

Linux 将给定目录及其子目录下的所有文件内容捆绑起来,linux,bash,shell,unix,sed,Linux,Bash,Shell,Unix,Sed,有个小项目要做。我需要编写一个自解压归档脚本,用于连接目录的内容,以便直接从命令行发送电子邮件 我必须编写一个shell脚本,它将绑定一个文件和/或目录列表,并将其内容输出到stdout。如果有一个目录,那么它将递归地遍历每个子目录。如果文件不是ASCII(如果是二进制文件),只需对其执行uuencode 建议使用“X”标记文件每行的开头: 这样,sed就可以用来提取文件的内容 输出应如下所示: >ls ping README.txt testsubdir >cd testsubdi

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

我必须编写一个shell脚本,它将绑定一个文件和/或目录列表,并将其内容输出到stdout。如果有一个目录,那么它将递归地遍历每个子目录。如果文件不是ASCII(如果是二进制文件),只需对其执行uuencode

建议使用“X”标记文件每行的开头:

这样,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标记的内容

请给我一些坚实的例子或提示,以便我可以有一个开始,并开始工作的基础上。非常感谢。

如果对您来说还不够,您可以使用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

可能您需要find命令递归地遍历目录结构。可能在这里回答:。查找“查找”命令示例嗨,谢谢大家。我尝试了“for file in/directory”,但$file实际上并没有遍历整个目录及其子目录。在…中是否为…做标记。。。语法自动执行此操作?谢谢希海内克,是因为他标记了内容吗?你能解释一下sed和tar吗?我不太懂代码。抱歉,我刚刚了解了shell脚本。非常感谢您的时间。
sed
在我的代码中充当过滤器,跳过自解压脚本内容
tar
将捆绑并提取存档中的目录内容。老实说,我不明白你问题中令人沮丧的部分。如果您想编写一个自解压归档脚本,该脚本可用于连接目录的内容,以便直接通过电子邮件发送这些内容,上面我的答案中有一个解决方案。只需将所有需要的内容复制到一个目录中,然后通过
tar
将其打包并附加到脚本中即可。嗨,Hynek,非常感谢。但我不认为这是我应该做的。我想那是因为我的问题不是很清楚。我在这里重新发布了任务:如果你有时间,请看一看。thanks@YongfengZhang例如我看不出有什么问题。如果您使用base64编码的版本,您将获得纯文本,因此您可以通过电子邮件发送它。
tar cz your_directory | base64 >> your_sfx.sh