Der rekursive Modus funktioniert nur für Verzeichnisse, nicht für Dateien. Durch die Verwendung des Globus '* .pdf' übergibt die Shell die Dateiliste an chown, die erkennt, dass es sich um Dateien handelt, und ändert die Berechtigungen für die angezeigten Dateien.
Denken Sie daran, dass in Shells der Glob von der Shell und nicht vom Befehl ausgewertet wird. Wenn der Glob mit Dateien übereinstimmt, werden sie an den Befehl übergeben, und der Befehl weiß nie, dass ein Glob vorhanden ist. (Dies unterscheidet sich von der Windows-Eingabeaufforderung). Wenn Sie ein Verzeichnis haben, mit dem Inhalt etwas wie:
machine:$ ls -F
file1.pdf file2.pdf other.txt subdir/
Und Sie tippten:
chown -R someuser:somegroup *.pdf
Die Shell würde zuerst die Liste erstellen: file1.pdf file2.pdf
und dann führe deinen Befehl aus:
chown -R someuser:somegroup file1.pdf file2.pdf
Es gibt kein Verzeichnis, in dem -R aktiv sein könnte. Es macht, was Sie es gefragt haben - ändern Sie den Besitz für die beiden Dateien in der Befehlszeile und ignorieren Sie das skurrile -R-Flag.
Um das zu tun, was Sie möchten, können Sie das '* .pdf' als Muster für dieses Verzeichnis und die Unterverzeichnisse verwenden find
, um Dateien zu finden, die einem Dateinamenmuster (oder vielen anderen Kriterien) entsprechen und an einen Unterbefehl übergeben werden
find . -type f -name '*.pdf' | xargs chown someuser:somegroup
Dies beginnt in der aktuellen Richtung '.' Das Suchen nach Dateien (Dateityp f) mit dem Namen pattern wird '*.pdf'
dann an xargs übergeben, das eine Befehlszeile für chmod erstellt. Beachten Sie die Anführungszeichen um das Muster. '*.pdf'
Denken Sie daran, dass die Shell ein Glob erstellt, wenn dies möglich ist. Sie möchten jedoch, dass das Muster übergeben wird, find
und müssen es daher in Anführungszeichen setzen.
Da Dateinamen Leerzeichen enthalten können, möchten Sie einen Trick anwenden, um Dateinamen mit Leerzeichen sicher zu machen:
find . -type f -name '*.pdf' -print0 | xargs -0 chown someuser:somegroup
In Bash 3 und niedriger ist dies die Art und Weise, wie Sie es tun müssen. Stärkeres Globbing ist in Bash 4 (mit shopt -s globstar
) und anderen Shells verfügbar . Dasselbe in zsh mit einem rekursiven Glob **
:
chown -R someuser:somegroup ./**/*.pdf
shopt -s globstar
rekursivem Globbing widerzuspiegeln .