web-dev-qa-db-ja.com

特定のファイルパターンへのファイルアクセス許可を現在のディレクトリのサブフォルダーに変更するにはどうすればよいですか?

chmodを使用して、現在のディレクトリでchmod +x *.shを実行しますが、shファイル拡張子を持つサブフォルダー内のファイルを含むすべてのファイルを変更したい場合はどうすればよいですか?.

chmod +x -R *は機能しますが、chmod +x -R *.shのようなものがもっと必要です

35
ivanceras

検索を使用:

find . -name "*.sh" -exec chmod +x {} \;
59
ennuikiller

Xargsとfindの見事な組み合わせを試してください。

find . -iname \*.sh -print0 | xargs -r0 chmod +x

.は開始するディレクトリで、この場合は作業ディレクトリです。

9
Orbling

findの最新バージョンでは、コマンドへの複数の呼び出しを回避するxargsアプローチの利点が得られます( chmod)。コマンドはわずかに異なります。

find . -name "*.sh" -exec chmod +x {} +

Arch 2015.09.01の find docs から切り取る(emphasis追加した):

-exec command {} +

この-execアクションのバリアントは、選択されたファイルに対して指定されたコマンドを実行しますが、コマンドラインは、選択された各ファイル名を末尾に追加することによって構築されます。コマンドの呼び出しの総数は、一致したファイルの数よりはるかに少なくなります。コマンドラインは、xargsがコマンドラインをビルドするのとほぼ同じ方法でビルドされます。コマンド内で許可される{}のインスタンスは1つだけです。コマンドは、開始ディレクトリで実行されます。

3
chappjc