xargs + chmod - ファイルまたはディレクトリが見つかりません

xargs + chmod - ファイルまたはディレクトリが見つかりません

プロジェクト内のすべてのファイルとディレクトリの権限を再帰的に変更しようとしています。

私は見つけたMagentoフォーラムに投稿する次のコマンドを使用できると言っています:

find ./ -type f | xargs chmod 644
find ./ -type d | xargs chmod 755
chmod -Rf 777 var
chmod -Rf 777 media

それはうまくいきましたfind ./ -type d | xargs chmod 755

コマンドはfind ./ -type f多数のファイルを返しましたが、chmod: access to 'fileXY.html' not possible: file or directory not foundを実行するとすべてのファイルが取得されますfind ./ -type f | xargs chmod 644

これをどうすれば解決できますか?

PS: var および media フォルダーに 777 権限を使用することを推奨されていることは承知していますが、これはセキュリティ上のリスクです。他に何を使用すればよいのでしょうか?

答え1

xargsファイル名に分割する文字が含まれているファイルがあると思いますが、例えば空白。これを解決するには、適切なオプション (GNU バリアントに由来し、POSIX では指定されていない) をサポートするfindおよびのバージョンを使用していると仮定してxargs、代わりに次のコマンドを使用する必要があります。

find . -type f -print0 | xargs -0 chmod 644
find . -type d -print0 | xargs -0 chmod 755

あるいはもっと良いのは、

chmod -R a-x,a=rX,u+w .

これには、より短い、1つのプロセスのみを使用する、そしてサポートされているという利点があります。POSIXchmod(見るこの答え詳細については)。

および に関する質問はmediaかなりvar広範囲にわたるため、具体的な回答にご興味がある場合は、ディレクトリの使用方法に関する詳細情報を添えて、別の質問として投稿することをお勧めします。

答え2

いかがでしょうか:

find ./ -type d -exec chmod 755 {} +

これは、ファイル名の改行も処理できる標準的な移植可能なソリューションです。

関連情報