2016-12-03 9 views
0

私は、フォルダ内のすべてのシェルスクリプトのために(再帰的に)検索:今、この奇妙なパイソン/シェル擬似コードのバッチフィルタスクリプトを実行可能にするにはどうすればよいですか?

$ (lambda file_list: chmod +x file_list) (find * | ag "\.sh\b") 

申し訳ありませんように私は、彼らが実行可能にしますか

$ find * | ag "\.sh\b" 

、私はそれを簡潔に伝える別の方法を知らない。

答えて

0

チェックCommand Substitution

埋め込み、それ別のコマンドの引数にするバッククォート内のコマンド:

$ chmod +x `find * | ag "\.sh\b"` 
0

だけ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という用語)に渡します。シェルの文脈での解釈を防ぐためにパターンをエスケープする必要があることに注意してください。

関連する問題