複数のタスクを実行する複数の条件を使用してfindコマンドを作成しようとしています。誰かが効率を上げるにはfindコマンドを使用する必要があると提案しました。これが私が持っているものです:
find $target \
\( ! -group $project -exec chgrp $project "{}" \; \) , \
\( ! -user $owner -exec chown $owner "{}" \; \) , \
\( ! -perm "$perms" -exec chmod "$perms" "{}" \; \) , \
\( -type d -exec chmod g+s "{}" \; \)
何かしているようですが、次のような結果が得られます。
検索:誤った表現
そして
(: 命令が見つかりません
実行したいスクリプトから
答え1
エラーメッセージは、(
コマンドで実行されることを示します。これは、行を続行するために使用されるバックスラッシュの1つが実際に行の最後の文字ではないことを意味します。空白がないことを確認してください。 Unix行末(LFのみ、CRなし)を使用していることを確認してください。
find
間違った表現に対する苦情は、これらのカンマによるものです。ただ削除してください。
find "$target" \
\( ! -group "$project" -exec chgrp "$project" {} \; \) \
\( ! -user "$owner" -exec chown "$owner" {} \; \) \
\( ! -perm "$perms" -exec chmod "$perms" {} \; \) \
\( -type d -exec chmod g+s {} \; \)
ファイルごとに1回ではなく、ファイルごとに1回ずつコマンドを実行して時間を節約できます。ここでは保証chown
できず、chgrp
呼び出しchmod
速度が異なる可能性があるため、ディレクトリエントリがキャッシュから削除される可能性がありますが、試してみましょう。
find "$target" \
\( ! -group "$project" -exec chgrp "$project" {} + \) \
\( ! -user "$owner" -exec chown "$owner" {} + \) \
\( ! -perm "$perms" -exec chmod "$perms" {} + \) \
\( -type d -exec chmod g+s {} + \)
chgrp
、ファイルにすでに正しいメタデータがある場合は、何もしないため、無条件に呼び出すことができますchmod
。chown
しかし、不必要に実行すると、より多くの呼び出しが発生します。これを実行した後、ユーティリティはstat
再度呼び出されますが、find
inodeはまだキャッシュされている可能性が高いため、それは価値があります。chgrp
通話をにマージして保存できますchown
。
find "$target" -exec chown "$owner:$project" {} + \
-exec chmod "$perms" {} + \
-type d -exec chmod g+s {} +