我几乎每周都需要检查我们的构建工件,以确保一切都得到考虑。该脚本如下。我无法运行这个命令。
#!/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.rpm
etc(所有与模式匹配的名称)前 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