アーティファクトを見つけて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

最大の問題は2行です。

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

*.rpm...そして*.zip道といいえこのセリフを引用してください。

これは、たとえばetc(パターンに一致するすべての名前)*.rpmに拡張されることを意味します。file1.rpm file2.rpm今後 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

これは、スクリプトが実行するすべての操作を特定のファイル名サフィックスを持つファイルを検索し、ファイルからその名前を収集する1つのコマンドにまとめます/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

関連情報