用于查找工件并将其合并到 txt 文件中的简单 Linux 脚本

用于查找工件并将其合并到 txt 文件中的简单 Linux 脚本

我几乎每周都需要检查我们的构建工件,以确保一切都得到考虑。该脚本如下。我无法运行这个命令。

#!/bin/bash 

cd /mydir/nextlevel/here
find . -name *.rpm > ~/rpm.txt
find . -name *.zip > ~/zip.txt

cd ~/
cat rpm.txt zip.txt > artifacts.txt

rm rpm.txt zip.txt

mv artifacts.txt /newdir/myname

答案1

主要问题是两条线

find . -name *.rpm > ~/rpm.txt
find . -name *.zip > ~/zip.txt

*.rpm...以及和*.zip的方式不是引用这些行。

这意味着eg*.rpm将扩展为file1.rpm file2.rpmetc(所有与模式匹配的名称) find甚至被调用。这可能会导致find抱怨“未知选项”(或类似)。

相反,您希望传递未展开的文件名模式:

find . -name '*.rpm' > ~/rpm.txt
find . -name '*.zip' > ~/zip.txt

这将使您的脚本正常工作。


建议:

#!/bin/sh

find /mydir/nextlevel/here -type f \( -name '*.rpm' -o -name '*.zip' \) -print >/newdir/myname

这将脚本正在执行的每一项操作合并到一个命令中,该命令查找具有特定文件名后缀的文件并在文件中收集它们的名称/newdir/myname

唯一的区别是满的路径(包括/mydir/nextlevel/here)将包含在每个文件的列表中,并且文件可能以不同的顺序列出。

以下脚本将修复输出文件中的路径:

#!/bin/sh

cd /mydir/nextlevel/here &&
find . -type f \( -name '*.rpm' -o -name '*.zip' \) -print >/newdir/myname

现在find还进行了仅有的如果cd成功的话。

答案2

这个命令可以完成您正在做的所有工作:

find /mydir/nextlevel/here \( -name "*.rpm" -o -name "*.zip" \) \
    > /newdir/myname/artifacts.txt

相关内容