Was macht das? `Find ... - Typ d | xargs chmod 770`

375
Zeth

Was machen diese beiden Linien?

find /backup/folder -type d|xargs chmod 770 find /backup/folder -type f|xargs chmod 660 

Ich googelte herum, kann aber nicht herausfinden, was d|xargsund f|xargstut.

1
Erklären Sie den langen Weg in der jetzt vorhandenen Antwort. Was Sie vermissen, ist das | ist eine Pipe, die zwei verschiedene Befehle verbindet. Der Suchabschnitt vor der Pipe erstellt eine Liste und wird dann an xargs weitergeleitet. Kurz gesagt, der erste Fund sucht nach Verzeichnissen (-type d) und der zweite Fund sucht nach einfachen Dateien (-type f). Tyson vor 6 Jahren 0
https://explainshell.com/ slhck vor 6 Jahren 0

1 Antwort auf die Frage

3
Kamil Maciorowski

Sie haben erwähnt, d|xargsund f|xargsdoch keiner von ihnen macht Sinn für sich. Der erste Befehl kann wie folgt geschrieben werden:

{ find /backup/folder -type d ; } | { xargs chmod 770 ; } 

Die Frage kann also lauten: Was macht find … | xargs …das? Es nimmt welche findAusgaben und macht es Argumente dessen, was danach kommt xargs.

Im ersten Befehl findfindet alle Verzeichnisse unter /backup/folder(einschließlich /backup/folder. Dann xargsführt Sie Folgendes aus:

chmod 770 <all_these_directories_here> 

Der Effekt ist, dass alle diese Verzeichnisse jetzt Berechtigungen haben 770(es sei denn, Sie konnten sie überhaupt nicht ändern). Dies bedeutet vollen Zugriff für den Besitzer, die Gruppe, keinen Zugriff für andere Benutzer.

Der zweite Befehl versucht, 660Berechtigungen für alle Dateien (wegen -type f) unter festzulegen /backup/folder. Dies bedeutet Lese- und Schreibberechtigung für den Eigentümer, das gleiche für die Gruppe, keinen Zugriff für andere Benutzer.


Note chmodhat eine -ROption, die es rekursiv macht. Dies ist jedoch kaum sinnvoll, wenn Sie alle Berechtigungen gleichzeitig festlegen müssen, da Sie fast immer andere Berechtigungen für Verzeichnisse benötigen als für Dateien, wie in diesem Fall.

Durch das Aufrufen chmod -R 770 /backup/folderwerden alle darin enthaltenen Dateien als ausführbare Dateien (für ihren Besitzer und die Gruppe) festgelegt. Dies ist selten das, was Sie möchten. Auf der anderen Seite chmod -R 660 /backup/folderwird verhindert, dass Sie Verzeichnisse durchsuchen.

Das Laufen find -type … | xargs chmod …(oder find -type … -exec chmod … {} +) mit Verzeichnissen und (separaten) Dateien ist der richtige Weg.

Es ist gut zu erwähnen, dass "find" und "xargs" vorzugsweise nur mit "-print0" bzw. "-0" verwendet werden sollten, um sie robuster zu machen. slhck vor 6 Jahren 0
Wie erfahre ich, was "d" und "f" bedeuten? Ich kann keine Hilfe oder Dokumentation für den Suchbefehl finden. Und slhck - warum ist es mit diesen Flaggen robuster? Welchen Unterschied macht es? Zeth vor 6 Jahren 0
@Zeth Lies die Manpage: `man find`. Oder [die Dokumentation] (https://www.gnu.org/software/findutils/manual/html_mono/find.html). Informationen zur Robustheit: Sie möchten, dass Ihre Shell-Befehle robust sind für Dateien, die ungewöhnliche Zeichen enthalten. In diesem Fall ist sogar Whitespace "ungewöhnlich", da es einige Befehle unterbrechen kann, insbesondere diejenigen, die auf das Analysieren von Dateilisten angewiesen sind. Lesen Sie beispielsweise den FAQ-Eintrag Nr. 1 hier: http://mywiki.wooledge.org/BashPitfalls slhck vor 6 Jahren 2