Это мой первый вопрос, хотя я какое-то время скрывался.
Вопрос: Я хотел бы использовать find для получения только файлов в каталоге с разрешениями, не установленными на 644 (или другое значение разрешения). Есть ли более короткий способ написать это или это единственный способ просто использовать параметры -perm и -or и перечислить каждый тип разрешений, кроме 644?
Это часть более крупной команды, которую я надеялся ускорить:
find /path/to/dir/ -type f -print0 | xargs -0 chmod 644
Я надеюсь, что предоставление xargs только тех файлов, которые нуждаются в обновлении, ускорит его. В каталоге ~ миллион файлов, но только ~ 10 000 обычно требуют обновления разрешений. Я думаю, что эта команда медленная, потому что она все равно передает все файлы по конвейеру. Может быть, есть более эффективный подход к более крупной команде. Дайте мне знать, если вы знаете об одном. Я все же хотел бы знать ответ на этот вопрос. И, кстати, я не могу обновить разрешения перед добавлением файлов в каталог.
В !
оператор возвращает истину, когда условие ложно.
Так что пока -perm 0644
сопоставляет файлы с установленными разрешениями rw-r - r--, ! -perm 0644
соответствует тем, у которых нет этих разрешений.
Вам нужна следующая команда:
find /path/to/dir/ -type f ! -perm 0644 -print0 | xargs -0 chmod 644
По крайней мере, с GNU find вы можете использовать! оператор для отрицания с -perm. Например:
find /path/to/dir ! -perm 644
Основываясь на приведенном вами примере, вы просто хотите убедиться, что у владельцев есть хотя бы чтение / запись, и все хотя бы прочитали? Если да, то вы можете просто сделать это с помощью chmod:
chmod -R a+r,u+w /path/to/dir/*
find /path/to/dir ! -perm 0644
И
find /path/to/dir ! -perm 0644 -exec chmod 0644 {} \;
Одно из возможных решений: если у вас меньше каталогов, запустите chmod -R 644 /path/to/dir
а затем запустите find /path/to/dir -type d -exec chmod 755 {} \;
.