Назад | Перейти на главную страницу

найти только файлы в каталоге с разрешениями, не установленными на 644 в Linux

Это мой первый вопрос, хотя я какое-то время скрывался.

Вопрос: Я хотел бы использовать 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 {} \;.