Витягніть файл і папки із заданими дозволами


11

Я пакую папку з великою кількістю підпапок і файлів у Windows із 7zip, завантажую в VPS і виконую команду:

tar -xvzf file.tar.gz

то всі розпаковані файли та папки мають дозвіл 777. Як це зробити, щоб папки мали дозволи 755 та файли 644?


Є веб-сайт під назвою "Командний рядок Фу", який також має багато інших ідей.
djangofan

Відповіді:


13

Якщо ви працюєте tar(1)як звичайний користувач, він застосує ваш umaskза замовчуванням. Якщо ви працюєте tar(1)як root, тоді ви можете надати --no-same-permissionsпараметр командного рядка з проханням tar(1)поважати umask.

Отже: або запустіть це як звичайний користувач:

umask 022
tar zxvf file.tar.gz

або запустити це як root:

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

Ви можете дотримуватися umask 022в ваш ~/.bashrc, ~/.bash_profileабо ~/.profile. (Для bash(1)отримання детальної інформації про запуск файлів див. Сторінку сторінки. Складно.)

Докладні відомості umaskможна знайти на сторінці вашої оболонки, на сторінці із umask(2)системними дзвінками або у umask(1posix)вибраній POSIX-програмі (якщо вона manpages-posixвстановлена).


umask 022 tar zxvf file.tar.gz -> це запитує у мене підтвердження для кожного файлу окремо, якщо я хочу його витягнути

Чи надмірно пишете наявні файли, роблячи це?
sarnold

6

Виконайте такі команди в корені каталогу, щоб встановити потрібні дозволи для ваших каталогів та файлів:

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

Будьте в курсі місця між закритим кучерявим кронштейном і задньою косою стрічкою


знайти: відсутній аргумент на `-exec '

будь-яка ідея, чому ця команда каже мені "знайти: відсутній аргумент до` -exec '"? Дякую.

Додайте пробіл між закриваючою фігурною дужкою та\;
poussma

2

Якщо ви використовуєте капітал X, chmodви можете використовувати його для встановлення дозволів на виконання лише в каталогах. тобто

chmod -R ugo+X .

1

Я знайшов це рішення, яке працювало на мене. Для папок і папок:

chmod -R 777 */

А для всіх файлів (також у папках і вкладених папках):

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

Усі коментарі вітаються, якщо це не гарний спосіб зробити це. Я тільки почав вивчати Linux.

Після коментарів більш надійним рішенням, яке б добре поводилося зі спеціальними символами, було б:

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

Але друга команда дає мені для багатьох файлів цей вихід: chmod: не може отримати доступ the': No such file or directory chmod: cannot access до.txt ': Немає такого файлу чи каталогу chmod: не може отримати доступ `./blog/wp-content/themes/OneRoom/LOGO': Немає такого файлу або di rectory

2
777є небезпечним і застосовується лише для дуже малої кількості систем.
sarnold

2
Для того, щоб поліпшити вашу другу команду find . -type f -print0 | xargs -0 chmod 644. -name "*"Чи не є необхідним, і xargs(1)буде аналізувати імена файлів на просторах або символ нового рядка , якщо ви не використовуєте -0- який розбирає імена файлів на ASCII NULсимвол, який не може з'явитися в іменах файлів. The -print0for find(1)просить його відформатувати свій вихід у режимі, придатному для xargs -0введення.
sarnold

0

знайти. -тип f -exec chmod 644 {} \;


2
Ласкаво просимо до Суперусера, будь ласка, повідомляйте, що відповіді на 1 рядок приймаються рідко, чи можете ви детальніше розглянути свою відповідь?
50-3
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.