Estrai file e cartelle con le autorizzazioni specificate


11

Imballare una cartella con molte sottocartelle e file in Windows con 7zip, caricare su VPS ed eseguire il comando:

tar -xvzf file.tar.gz

quindi tutti i file e le cartelle decompressi hanno autorizzazioni di 777. Come posso ottenerlo in modo che le cartelle dispongano delle autorizzazioni di 755 e dei file 644?


C'è un sito web chiamato "Command Line Fu" che ha anche molte altre idee.
Djangofan,

Risposte:


13

Se sei in esecuzione tar(1)come utente normale, verrà applicato il tuo umaskper impostazione predefinita. Se si esegue tar(1)come root, quindi è possibile fornire l' --no-same-permissionsopzione della riga di comando per chiedere tar(1)di rispettare umask.

Quindi: esegui questo come utente normale:

umask 022
tar zxvf file.tar.gz

o eseguilo come root:

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

Si potrebbe voler attaccare umask 022nella vostra ~/.bashrc, ~/.bash_profileo ~/.profile. (Vedi la bash(1)manpage per tutti i dettagli sui file di avvio. È complicato.)

I dettagli su umasksono disponibili nella manpage della shell, nella umask(2)manpage di chiamata di sistema o nella umask(1posix)manpage di utilità fornita da POSIX (se è manpages-posixinstallata).


umask 022 tar zxvf file.tar.gz -> questo mi chiede conferma per ogni file separatamente se voglio estrarlo

Stai sovrascrivendo i file esistenti mentre lo fai?
Sarnold,

6

Esegui i seguenti comandi nella radice della directory per impostare le autorizzazioni desiderate per le tue directory e file:

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

Fare attenzione allo spazio tra la parentesi graffa di chiusura e la barra posteriore


trovare: argomento mancante per `-exec '

qualche idea sul perché questo comando mi dice "trova: argomento mancante a` -exec '"? Grazie.

Aggiungi uno spazio tra la parentesi graffa di chiusura e il\;
poussma il

2

Se usi X maiuscolo chmodpuoi usarlo per impostare le autorizzazioni di esecuzione solo su directory. vale a dire

chmod -R ugo+X .

1

Ho trovato questa soluzione che ha funzionato per me. Per cartelle e sottocartelle:

chmod -R 777 */

E per tutti i file (anche in cartelle e sottocartelle):

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

Tutti i commenti sono ben accetti se questo non è un buon modo di farlo. Ho appena iniziato a studiare Linux.

A seguito dei commenti, una soluzione più solida che gestisce bene i caratteri speciali sarebbe:

find . -type f -print0 | xargs -0 chmod 644  # For files
find . -type d -print0 | xargs -0 chmod 755  # For directories

Ma il secondo comando mi dà su molti file questo output: chmod: impossibile accedere a the': No such file or directory chmod: cannot access Logo.txt ': nessun file o directory chmod: impossibile accedere a `./blog/wp-content/themes/OneRoom/LOGO': nessun file o di rectory

2
777è pericoloso e applicabile solo a una minoranza di sistemi molto piccola.
Sarnold,

2
Per migliorare il tuo secondo comando, find . -type f -print0 | xargs -0 chmod 644. Non -name "*"è necessario e xargs(1)analizzerà i nomi dei file negli spazi o nelle nuove righe a meno che non si usi il -0- che analizza i nomi dei file sul NULcarattere ASCII , che non può apparire nei nomi dei file. Il -print0for gli find(1)chiede di formattare il suo output in una modalità adatta per l' xargs -0input.
Sarnold,

0

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


2
Benvenuto in Superuser, ti preghiamo di notare che le risposte a 1 riga sono raramente accettate, puoi approfondire la tua risposta?
50-3
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.