以前はできたこれらのファイルを chmod できないのはなぜですか?

以前はできたこれらのファイルを chmod できないのはなぜですか?

フォルダー内の sh ファイルに実行権限を追加しようとしていました。そのために、誤って次のものを使用しました:

find . -print0 -iname '*.sh' | xargs -0 chmod -v 744

出力は次のようになります。

mode of `.' changed from 0755 (rwxr-xr-x) to 0744 (rwxr--r--)
mode of `./codis.sh' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./ne fil.sw' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./.whois1.sh.swo' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./new file' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./ezik.sh' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./.whois1.sh.swp' changed from 0600 (rw-------) to 0744 (rwxr--r--)
mode of `./whois1.sh' retained as 0744 (rwxr--r--)

find部分の正しい使い方は

find . -iname '*.sh' -print0

そこで、次のような別の検索を作成しました。

find . \! -iname '*.sh' -print0 | xargs -0 chmod 600

非 sh ファイルの権限を元に戻せるようにするためです (一部のファイルの権限が 600 ではなく 644 になっているのがわかりますが、今は問題ではありません)。このコマンドの出力は次のようになります。

chmod: cannot access `./ne fil.sw': Permission denied
chmod: cannot access `./.whois1.sh.swo': Permission denied
chmod: cannot access `./new file': Permission denied
chmod: cannot access `./.whois1.sh.swp': Permission denied

sudoもそうでしたが、それでも何もありませんでした...

権限を正しく理解していないようです... 正しく理解していれば、そのディレクトリでコマンドを実行するには、xディレクトリに対する権限も必要です。direc

答え1

cmdfindは現在のディレクトリ " ." も検出します。このディレクトリの権限は に設定される600ため、このディレクトリ内のファイルにアクセスする権限が失われます。

したがってcd ..chmod 700上記のディレクトリから元に戻す操作を実行するとfind、次のように現在のディレクトリが除外されます。

find . \! -path . \! -iname '*.sh' -print0 | xargs -0 chmod 600

関連情報