find . -perm -u+x,g+x,o+x -type f -exec grep -i -l -H -E '#!/bin/bash|#!/bin/sh' {} \; 2>/dev/null 1>/$user_scripts
私の使命は、4つのフォルダでN人のユーザーに存在できるスクリプトを見つけることです。 sshを使用して上記のコマンドを実行して、後で使用するファイルのリストを作成します。ファイル拡張子が .sh と .bash で、 #!/bin/bash|#!/bin/sh を含まない一部のスクリプトが見つかりません。
これを改善する必要がありますが、管理権限がない(特別なソフトウェア/ライブラリなし)、Solarisサーバーで実行できるものを見つけるのが困難です。可能であれば、すべてのユーザーのすべてのリストに不必要に表示される別のスクリプトを実行する必要はありません。
基本的には、同じ行に一種の「If(find or grep)」が必要です。可能ですか?
ベストアンサー1
コマンドの他の部分をORで連結することでこれを行うことができますfind
。選択基準を、すべてのファイルの必須要件(権限など)、名前付きファイル、または適切なヘッダーを持つファイルの3つの部分に分割することをお勧めします。
これは次のように表現できますfind
(読みやすくするために、ここでは複数行に分割します)。
find . -perm -u+x,g+x,o+x -type f \(
-name '*.sh' -o
-name '*.bash' -o
-exec grep -il -E '^#!/bin/bash|^#!/bin/sh' {} \;
\) 2>/dev/null >/$user_scripts