Extrahieren Sie Dateien und Ordner mit den angegebenen Berechtigungen

11

Ich packe einen Ordner mit vielen Unterordnern und Dateien in Windows mit 7zip, lade ihn auf VPS hoch und führe dann den folgenden Befehl aus:

tar -xvzf file.tar.gz

Dann haben alle entpackten Dateien und Ordner die Berechtigung 777. Wie erhalte ich sie, damit Ordner die Berechtigung 755 und die Dateien 644 haben?

Kaspar L. Palgi
quelle
Es gibt eine Website namens "Command Line Fu", die auch viele andere Ideen hat.
Djangofan

Antworten:

13

Wenn Sie tar(1)als normaler Benutzer ausgeführt werden, wird umaskstandardmäßig Ihr Benutzer angewendet. Wenn Sie tar(1)als rootausführen, können Sie eine --no-same-permissionsBefehlszeilenoption angeben, in der Sie tar(1)aufgefordert werden, die umask.

Also: Führen Sie dies entweder als normaler Benutzer aus:

umask 022
tar zxvf file.tar.gz

oder führen Sie dies aus als root:

umask 022
tar zxvf file.tar.gz --no-same-permissions

Vielleicht haben Sie haften möchten umask 022in Ihr ~/.bashrc, ~/.bash_profileoder ~/.profile. ( bash(1)Ausführliche Informationen zu den Startdateien finden Sie in der Manpage. Es ist kompliziert.)

Details zu umaskfinden Sie in der Manpage Ihrer Shell, in der Manpage für umask(2)Systemaufrufe oder in der von umask(1posix)POSIX bereitgestellten Manpage für Dienstprogramme (sofern Sie diese manpages-posixinstalliert haben).

Sarnold
quelle
umask 022 tar zxvf file.tar.gz -> dies bittet mich um Bestätigung für jede Datei separat, wenn ich sie extrahieren möchte
Überschreiben Sie dabei vorhandene Dateien?
Sarnold
6

Führen Sie die folgenden Befehle im Stammverzeichnis des Verzeichnisses aus, um die gewünschten Berechtigungen für Ihre Verzeichnisse und Dateien festzulegen:

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

Beachten Sie den Abstand zwischen der schließenden geschweiften Klammer und dem hinteren Schrägstrich

alxbrd
quelle
find: fehlendes Argument zu `-exec '
Irgendeine Idee, warum dieser Befehl zu mir sagt "find: fehlendes Argument für` -exec '"? Vielen Dank.
Fügen Sie ein Leerzeichen zwischen der schließenden geschweiften Klammer und der\;
poussma
2

Wenn Sie in Großbuchstaben X verwenden chmod, können Sie damit die Ausführungsberechtigungen nur für Verzeichnisse festlegen. dh

chmod -R ugo+X .
Stephen Quan
quelle
1

Ich habe diese Lösung gefunden, die für mich funktioniert hat. Für Ordner und Unterordner:

chmod -R 777 */

Und für alle Dateien (auch in Ordnern und Unterordnern):

find . -type f -name "*" | xargs chmod 644

Alle Kommentare sind willkommen, wenn dies kein guter Weg ist. Ich habe gerade angefangen, Linux zu lernen.

Nach den Kommentaren wäre eine robustere Lösung, die Sonderzeichen gut handhabt:

find . -type f -print0 | xargs -0 chmod 644  # For files
find . -type d -print0 | xargs -0 chmod 755  # For directories
Kaspar L. Palgi
quelle
Aber der zweite Befehl gibt mir für viele Dateien diese Ausgabe: chmod: kann nicht auf the': No such file or directory chmod: cannot access Logo.txt zugreifen ': Keine solche Datei oder Verzeichnis chmod: kann nicht auf `./blog/wp-content/themes/OneRoom/LOGO' zugreifen: Keine solche Datei oder di Pfarrhaus
2
777ist gefährlich und gilt nur für eine sehr kleine Minderheit von Systemen.
Sarnold
2
Um Ihren zweiten Befehl zu verbessern , find . -type f -print0 | xargs -0 chmod 644. Das -name "*"ist nicht erforderlich und xargs(1)analysiert Dateinamen in Leerzeichen oder Zeilenumbrüchen, es sei denn, Sie verwenden die Option-0 - die Dateinamen in ASCII- NULZeichen analysiert , die nicht in Dateinamen enthalten sein können. Das -print0for find(1)fordert es auf, seine Ausgabe in einem für die xargs -0Eingabe geeigneten Modus zu formatieren .
Sarnold
0

finden . -Typ f -exec chmod 644 {} \;

beschämt
quelle
2
Willkommen bei Superuser. Bitte beachten Sie, dass 1-zeilige Antworten selten akzeptiert werden. Können Sie Ihre Antwort näher erläutern?
50-3