Erläutert den weiten Weg in der jetzt vorhandenen Antwort, was Sie vermissen, ist das | ist eine Pipe, die zwei verschiedene Befehle verbindet. Der Find-Teil vor der Pipe erstellt eine Liste und leitet sie an xargs weiter. Kurz gesagt, der erste Suchvorgang sucht nach Verzeichnissen (-type d) und der zweite nach einfachen Dateien (-type f).
Die Frage könnte also lauten: Was macht find … | xargs …das? Es nimmt, was findausgegeben wird, und argumentiert, was danach ist xargs.
Im ersten Befehl findfinden Sie alle Verzeichnisse unter /backup/folder(einschließlich /backup/folder. Dann xargsführt:
chmod 770 <all_these_directories_here>
Dies hat zur Folge, dass jetzt alle diese Verzeichnisberechtigungen gültig sind 770(es sei denn, Sie konnten sie überhaupt nicht ändern). Dies bedeutet vollen Zugriff für den Eigentümer, die Gruppe, keinen Zugriff für andere Benutzer.
Der zweite Befehl versucht, 660Berechtigungen für alle Dateien (aufgrund von -type f) unter festzulegen /backup/folder. Dies bedeutet, dass der Eigentümer über Lese- und Schreibrechte verfügt, ebenso wie die Gruppe, und dass andere Benutzer keinen Zugriff haben.
Note chmodhat eine -ROption, die es rekursiv macht. Es ist jedoch kaum sinnvoll, wenn Sie alle Berechtigungen auf einmal festlegen müssen, da Sie für Verzeichnisse fast immer andere Berechtigungen 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 Eigentümer und die Gruppe) festgelegt, was selten gewünscht wird. Auf der anderen Seite chmod -R 660 /backup/folderwerden Sie daran gehindert, Verzeichnisse zu durchsuchen.
Das Ausführen find -type … | xargs chmod …(oder find -type … -exec chmod … {} +) von Verzeichnissen und (separaten) Dateien ist der richtige Weg.
Es wäre gut zu erwähnen, dass findund xargssollte vorzugsweise nur mit -print0und verwendet -0werden, um es robuster zu machen.
Slhck
Wie finde ich heraus, was das dund was das fbedeutet? Ich kann keine Hilfe oder Dokumentation für den Befehl find finden. Und slhck - warum ist das mit diesen Flaggen "robuster"? Welchen Unterschied macht es?
Zeth
2
@Zeth Lesen Sie die Man - Page: man find. Oder die Dokumentation . Über Robustheit: Sie möchten, dass Ihre Shell-Befehle robust gegenüber Dateien sind, die ungewöhnliche Zeichen enthalten. In diesem Fall ist sogar ein Leerzeichen "ungewöhnlich", da es einige Befehle beschädigen kann, insbesondere solche, die auf dem Analysieren von Dateilisten beruhen. Lesen Sie beispielsweise FAQ-Eintrag Nummer 1 hier: mywiki.wooledge.org/BashPitfalls
Antworten:
Sie erwähnten
d|xargs
undf|xargs
doch macht keines von diesen für sich Sinn. Der erste Befehl kann wie folgt geschrieben werden:Die Frage könnte also lauten: Was macht
find … | xargs …
das? Es nimmt, wasfind
ausgegeben wird, und argumentiert, was danach istxargs
.Im ersten Befehl
find
finden Sie alle Verzeichnisse unter/backup/folder
(einschließlich/backup/folder
. Dannxargs
führt:Dies hat zur Folge, dass jetzt alle diese Verzeichnisberechtigungen gültig sind
770
(es sei denn, Sie konnten sie überhaupt nicht ändern). Dies bedeutet vollen Zugriff für den Eigentümer, die Gruppe, keinen Zugriff für andere Benutzer.Der zweite Befehl versucht,
660
Berechtigungen für alle Dateien (aufgrund von-type f
) unter festzulegen/backup/folder
. Dies bedeutet, dass der Eigentümer über Lese- und Schreibrechte verfügt, ebenso wie die Gruppe, und dass andere Benutzer keinen Zugriff haben.Note
chmod
hat eine-R
Option, die es rekursiv macht. Es ist jedoch kaum sinnvoll, wenn Sie alle Berechtigungen auf einmal festlegen müssen, da Sie für Verzeichnisse fast immer andere Berechtigungen benötigen als für Dateien, wie in diesem Fall.Durch das Aufrufen
chmod -R 770 /backup/folder
werden alle darin enthaltenen Dateien als ausführbare Dateien (für ihren Eigentümer und die Gruppe) festgelegt, was selten gewünscht wird. Auf der anderen Seitechmod -R 660 /backup/folder
werden Sie daran gehindert, Verzeichnisse zu durchsuchen.Das Ausführen
find -type … | xargs chmod …
(oderfind -type … -exec chmod … {} +
) von Verzeichnissen und (separaten) Dateien ist der richtige Weg.quelle
find
undxargs
sollte vorzugsweise nur mit-print0
und verwendet-0
werden, um es robuster zu machen.d
und was dasf
bedeutet? Ich kann keine Hilfe oder Dokumentation für den Befehl find finden. Und slhck - warum ist das mit diesen Flaggen "robuster"? Welchen Unterschied macht es?man find
. Oder die Dokumentation . Über Robustheit: Sie möchten, dass Ihre Shell-Befehle robust gegenüber Dateien sind, die ungewöhnliche Zeichen enthalten. In diesem Fall ist sogar ein Leerzeichen "ungewöhnlich", da es einige Befehle beschädigen kann, insbesondere solche, die auf dem Analysieren von Dateilisten beruhen. Lesen Sie beispielsweise FAQ-Eintrag Nummer 1 hier: mywiki.wooledge.org/BashPitfalls