私は、フォルダ内のすべてのシェルスクリプトのために(再帰的に)検索:今、この奇妙なパイソン/シェル擬似コードのバッチフィルタスクリプトを実行可能にするにはどうすればよいですか?
$ (lambda file_list: chmod +x file_list) (find * | ag "\.sh\b")
申し訳ありませんように私は、彼らが実行可能にしますか
$ find * | ag "\.sh\b"
、私はそれを簡潔に伝える別の方法を知らない。
私は、フォルダ内のすべてのシェルスクリプトのために(再帰的に)検索:今、この奇妙なパイソン/シェル擬似コードのバッチフィルタスクリプトを実行可能にするにはどうすればよいですか?
$ (lambda file_list: chmod +x file_list) (find * | ag "\.sh\b")
申し訳ありませんように私は、彼らが実行可能にしますか
$ find * | ag "\.sh\b"
、私はそれを簡潔に伝える別の方法を知らない。
だけfind
さん-exec
オプションを使用します。chmod
コマンドは、各選択されたファイルを追加することによって構築されている
find -type f -name '*.sh' -exec chmod +x {} +
を最後の名前:chmod +x f1.sh f2.sh ...
。 {}
は処理中の現在のファイル名に置き換えられます。 man find
を参照してください。
あなたの現在のコマンドに関する
あなたが暗黙のうちに起因するアスタリスク(*
)は、すべてのに展開されているという事実にfind
にカレントディレクトリにすべてノードを渡しているので、あなたの現在のコマンドは、主に間違っていますカレントディレクトリのファイル:find file1 file2 dir1 dir2 ...
。明らかに、非常に効率的な方法は、.sh
拡張子を持つすべてのファイルを見つけることです。
第2の問題はツールを使用することです。find
は非常にパターンでファイル名を検索できるためです。たとえば、-name
、-path
、および-regex
のオプションについてを参照してください。 .sh
拡張子を持つファイルをすべて検索するには、'*.sh'
パターンを-name
オプション(「test」、find
という用語)に渡します。シェルの文脈での解釈を防ぐためにパターンをエスケープする必要があることに注意してください。