Finden Sie Verzeichnisse und Dateien mit anderen Berechtigungen als 775/664

20

Ich verschiebe eine Website von einem Server auf einen anderen und Git speichert keine Metadaten wie Dateiberechtigungen. Ich muss die Verzeichnisse und Dateien finden, die nicht 775/664 sind.

Im Moment benutze ich diese zusammengepflasterte Apparatur:

$ 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'

Obwohl dies funktioniert, finde ich es ziemlich hackig. Gibt es einen besseren Weg, vielleicht einen kanonischen Weg, oder sollte ich nur hacky sein?

Dies läuft auf einer aktuellen Ubuntu-Version mit GNU-Tools unter Bash.

dotancohen
quelle

Antworten:

39

Verwenden Sie den -permTest findin Kombination mit -not:

find -type d -not -perm 775 -o -type f -not -perm 664
  • -perm 775Stimmt mit allen Dateien überein, deren Berechtigungen genau gleich sind 775. -perm 664macht das gleiche für 664.
  • -not (Boolesches NICHT) negiert den folgenden Test, sodass er genau dem Gegenteil von dem entspricht, was er haben würde: In diesem Fall alle Dateien, die nicht über die richtigen Berechtigungen verfügen.
  • -o(Boolesches ODER) kombiniert zwei Sätze von Tests miteinander, wobei beide übereinstimmen: Es hat die niedrigste Priorität, sodass unsere Tests in zwei verschiedene Gruppen unterteilt werden. Sie können auch Klammern verwenden , um dies deutlicher zu machen. Hier ordnen wir Verzeichnisse mit Berechtigungen zu, die keine sind, 775und gewöhnliche Dateien mit Berechtigungen, die keine sind 664.

Wenn Sie zwei separate Befehle für Verzeichnisse und Dateien wünschen, schneiden Sie sie einfach in zwei Hälften -ound verwenden Sie jede Hälfte separat.

Michael Homer
quelle
Schön, danke! Ich wusste nicht, dass zwei verschiedene Bedingungen festgelegt werden können (z. B. Typ -d und Typ -f), und ich wusste auch nichts über -perm.
Dotancohen
Beachten Sie möglicherweise, dass dies -notkein POSIX-Standard ist. sie verwenden !stattdessen.
user1404316
2

Ich habe keine Ahnung, was Ihr Code erreichen wollte. Normalerweise dient das Suchen von Dateien und Verzeichnissen mit falschen Berechtigungen dem Zweck, diese zu ändern.

Das ist es also, was ich erfolgreich in Ubuntu 16.04 verwende

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

Dies zeigt die! Symbol wird ausgeblendet

NZ Dev
quelle
Tatsächlich bestand das Ziel nicht darin, die Berechtigungen der Dateien zu ändern, sondern zu ermitteln, welche Dateien Schneeflockenberechtigungen benötigen, wenn sie auf einen Produktions-Webserver hochgeladen werden. Vielen Dank.
Dotancohen