Znajdź katalogi i pliki z uprawnieniami innymi niż 775/664

21

Przenoszę witrynę z jednego serwera na drugi, a Git nie przechowuje metadanych, takich jak uprawnienia do plików. Muszę znaleźć katalogi i pliki, które nie są odpowiednio 775/664.

W tej chwili używam tego brukowanego urządzenia:

$ find . -type d -exec ls -la {} \; | grep ^d | grep -v ^drwxrwxr-x
$ find . -type f -exec ls -la {} \; | grep -v ^d | grep -v ^-rw-rw-r-- | grep -v '.git'

Chociaż to działa, wydaje mi się, że jest raczej zuchwały. Czy jest na to lepszy sposób, może kanoniczny, czy powinienem być po prostu hackerski?

Działa to na najnowszej wersji Ubuntu z narzędziami GNU pod Bash.

dotancohen
źródło

Odpowiedzi:

39

Użyj -permtestu findw połączeniu z -not:

find -type d -not -perm 775 -o -type f -not -perm 664
  • -perm 775dopasowuje wszystkie pliki z uprawnieniami dokładnie równymi 775. -perm 664robi to samo dla 664.
  • -not (boolean NOT) neguje następujący test, więc odpowiada dokładnie odwrotności tego, co miałby: w tym przypadku wszystkie pliki, które nie mają odpowiednich uprawnień.
  • -o(boolean OR) łączy ze sobą dwa zestawy testów, pasujących do siebie, gdy jeden z nich to robi: ma najniższy priorytet, więc dzieli nasze testy na dwie odrębne grupy. Możesz również użyć nawiasów, aby być bardziej wyraźnym. Tutaj dopasowujemy katalogi z uprawnieniami, które nie są, 775a zwykłe pliki z uprawnieniami, które nie są 664.

Jeśli chcesz mieć dwa osobne polecenia dla katalogów i plików, po prostu podziel je na pół -oi użyj każdej z nich osobno.

Michael Homer
źródło
Pięknie dziękuję! Nie wiedziałem, że można ustawić dwa różne warunki (na przykład typ -d i typ -f), ani nie wiedziałem o -perm.
dotancohen
Może zauważ, że -notto nie jest standard POSIX; !zamiast tego używają .
użytkownik1404316
2

Nie mam pojęcia, co twój kod próbował osiągnąć. Zwykle powodem znajdowania plików i katalogów z niepoprawnymi uprawnieniami jest ich zmiana.

Właśnie tego z powodzeniem używam w Ubuntu 16.04

find \! -perm 775 -type d -exec chmod 775 {} \;
find \! -perm 664 -type f -exec chmod 664 {} \;

To pokazuje! symbol ucieka

NZ Dev
źródło
W rzeczywistości celem nie była zmiana uprawnień do plików, ale raczej określenie, które pliki wymagają uprawnień do płatka śniegu podczas przesyłania ich na produkcyjny serwer WWW. Dzięki.
dotancohen