web-dev-qa-db-ja.com

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権限を使用することを推奨したことは知っていますが、これはセキュリティ上のリスクですが、他に何を使用する必要がありますか?

3
Black

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

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つのプロセスのみを使用し、 POSIX chmod によってサポートされるという利点があります(詳細については、 この回答 を参照してください)。

mediavarに関する質問はかなり広範です。特定の回答に興味がある場合は、ディレクトリの使用方法に関する詳細を記載した別の質問として質問することをお勧めします。

5
Stephen Kitt

どうですか:

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

これは、ファイル名の改行も処理する標準的なポータブルソリューションです。

3
schily