chmod
を使用して、現在のディレクトリでchmod +x *.sh
を実行しますが、shファイル拡張子を持つサブフォルダー内のファイルを含むすべてのファイルを変更したい場合はどうすればよいですか?.
chmod +x -R *
は機能しますが、chmod +x -R *.sh
のようなものがもっと必要です
検索を使用:
find . -name "*.sh" -exec chmod +x {} \;
Xargsとfindの見事な組み合わせを試してください。
find . -iname \*.sh -print0 | xargs -r0 chmod +x
.
は開始するディレクトリで、この場合は作業ディレクトリです。
find
の最新バージョンでは、コマンドへの複数の呼び出しを回避するxargs
アプローチの利点が得られます( chmod
)。コマンドはわずかに異なります。
find . -name "*.sh" -exec chmod +x {} +
Arch 2015.09.01の find
docs から切り取る(emphasis追加した):
-exec command {} +
この
-exec
アクションのバリアントは、選択されたファイルに対して指定されたコマンドを実行しますが、コマンドラインは、選択された各ファイル名を末尾に追加することによって構築されます。コマンドの呼び出しの総数は、一致したファイルの数よりはるかに少なくなります。コマンドラインは、xargs
がコマンドラインをビルドするのとほぼ同じ方法でビルドされます。コマンド内で許可される{}
のインスタンスは1つだけです。コマンドは、開始ディレクトリで実行されます。