gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:22:24 24 4
gpt4 key购买 nike

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

我必须编写一个 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标记的内容。

请给我一些可靠的例子或提示,以便我可以开始并根据它们开始工作。非常感谢。

最佳答案

如果shar对您来说还不够,您可以使用 tar 制定自己的解决方案存档。

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

#!/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

关于linux - 捆绑给定目录及其子目录下的所有文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19331609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com