Extraire des fichiers et des dossiers avec les autorisations spécifiées

11

J'emballe un dossier avec beaucoup de sous-dossiers et de fichiers dans Windows avec 7zip, télécharge sur VPS et puis lance la commande:

tar -xvzf file.tar.gz

alors tous les fichiers et dossiers décompressés ont les autorisations de 777. Comment puis-je l'obtenir pour que les dossiers aient les autorisations de 755 et les fichiers 644?

Kaspar L. Palgi
la source
Il existe un site Web appelé "Command Line Fu" qui contient également de nombreuses autres idées.
djangofan

Réponses:

13

Si vous exécutez en tar(1)tant qu'utilisateur normal, il appliquera votre umaskpar défaut. Si vous utilisez tar(1)as root, vous pouvez donner une --no-same-permissionsoption de ligne de commande pour demander tar(1)de respecter le umask.

Donc: soit exécutez ceci en tant qu'utilisateur normal:

umask 022
tar zxvf file.tar.gz

ou exécutez ceci comme root:

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

Vous voudrez peut - être coller umask 022dans votre ~/.bashrc, ~/.bash_profileou ~/.profile. (Voir la bash(1)page de manuel pour plus de détails sur les fichiers de démarrage. C'est compliqué.)

Les détails sur umaskpeuvent être trouvés dans la page de manuel de votre shell, la page de manuel de l' umask(2)appel système ou la umask(1posix)page de manuel de l'utilitaire fourni par POSIX (si vous l'avez manpages-posixinstallé).

sarnold
la source
umask 022 tar zxvf file.tar.gz -> cela me demande une confirmation pour chaque fichier séparément si je veux l'extraire
Remplacez-vous les fichiers existants lorsque vous le faites?
sarnold
6

Exécutez les commandes suivantes à la racine du répertoire pour définir les autorisations souhaitées pour vos répertoires et fichiers:

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

Soyez conscient de l'espace entre le crochet bouclé de fermeture et la barre oblique arrière

alxbrd
la source
trouver: argument manquant à `-exec '
aucune idée pourquoi cette commande me dit "find: argument manquant à` -exec '"? Merci.
Ajouter un espace entre le crochet bouclé de fermeture et le\;
poussma
2

Si vous utilisez X majuscule, chmodvous pouvez l'utiliser pour définir les autorisations d'exécution uniquement sur les répertoires. c'est à dire

chmod -R ugo+X .
Stephen Quan
la source
1

J'ai trouvé cette solution qui a fonctionné pour moi. Pour les dossiers et sous-dossiers:

chmod -R 777 */

Et pour tous les fichiers (également dans les dossiers et sous-dossiers):

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

Tous les commentaires sont les bienvenus si ce n'est pas une bonne façon de procéder. Je viens de commencer à apprendre Linux.

Après les commentaires, une solution plus robuste qui gère bien les caractères spéciaux serait:

find . -type f -print0 | xargs -0 chmod 644  # For files
find . -type d -print0 | xargs -0 chmod 755  # For directories
Kaspar L. Palgi
la source
Mais la deuxième commande me donne sur de nombreux fichiers cette sortie: chmod: ne peut pas accéder à the': No such file or directory chmod: cannot access Logo.txt ': Aucun fichier ou répertoire de ce type chmod: ne peut pas accéder à `./blog/wp-content/themes/OneRoom/LOGO': Pas de fichier ou di rectory
2
777est dangereux et ne s'applique qu'à une très petite minorité de systèmes.
sarnold
2
Pour améliorer votre deuxième commande, find . -type f -print0 | xargs -0 chmod 644. Le -name "*"n'est pas nécessaire et xargs(1)analysera les noms de fichiers sur les espaces ou les retours à la ligne à moins que vous n'utilisiez le -0- qui analyse les noms de fichiers sur le NULcaractère ASCII , qui ne peut pas apparaître dans les noms de fichiers. Le -print0for find(1)lui demande de formater sa sortie dans un mode adapté à l' xargs -0entrée.
sarnold
0

trouver . -type f -exec chmod 644 {} \;

hamed
la source
2
Bienvenue sur Superuser, veuillez noter que les réponses en 1 ligne sont rarement acceptées, pouvez-vous en dire plus sur votre réponse?
50-3