Ekstrak file dan folder dengan izin yang ditentukan

11

Saya mengemas folder dengan banyak sub-folder dan file di Windows dengan 7zip, mengunggah ke VPS dan kemudian menjalankan perintah:

tar -xvzf file.tar.gz

maka semua file dan folder yang sudah dibongkar memiliki izin 777. Bagaimana cara mendapatkannya sehingga folder akan memiliki izin 755 dan file 644?

Kaspar L. Palgi
sumber
Ada situs web yang disebut "Command Line Fu" yang memiliki banyak ide lain juga.
Djangofan

Jawaban:

13

Jika Anda berjalan tar(1)sebagai pengguna biasa, itu akan berlaku umasksecara default. Jika Anda menjalankan tar(1)sebagai root, maka Anda dapat memberikan --no-same-permissionsopsi baris perintah untuk meminta tar(1)untuk menghormati umask.

Jadi: jalankan ini sebagai pengguna biasa:

umask 022
tar zxvf file.tar.gz

atau jalankan ini sebagai root:

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

Anda mungkin ingin tetap umask 022ke dalam ~/.bashrc, ~/.bash_profileatau ~/.profile. (Lihat bash(1)manual untuk detail lengkap tentang file start up. Ini rumit.)

Detail tentang umaskdapat ditemukan di halaman shell Anda, halaman umask(2)panggilan sistem, atau halaman umask(1posix)utilitas yang disediakan POSIX (jika Anda telah manpages-posixmenginstalnya).

sarnold
sumber
umask 022 tar zxvf file.tar.gz -> ini meminta saya untuk konfirmasi untuk setiap file secara terpisah jika saya ingin mengekstraknya
Apakah Anda terlalu banyak menulis file yang ada saat melakukannya?
sarnold
6

Jalankan perintah berikut di root direktori untuk mengatur izin yang diinginkan untuk direktori dan file Anda:

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

Waspadai jarak antara braket keriting penutup dan garis miring

alxbrd
sumber
find: missing argumen to `-exec '
tahu mengapa perintah ini mengatakan kepada saya "find: missing argumen to` -exec '"? Terima kasih.
Tambahkan spasi di antara braket keriting penutup dan\;
poussma
2

Jika Anda menggunakan modal X di chmodAnda dapat menggunakannya untuk mengatur izin eksekusi hanya pada direktori. yaitu

chmod -R ugo+X .
Stephen Quan
sumber
1

Saya menemukan solusi ini yang berhasil untuk saya. Untuk folder dan subfolder:

chmod -R 777 */

Dan untuk semua file (juga dalam folder dan subfolder):

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

Semua komentar diterima jika ini bukan cara yang baik untuk melakukannya. Saya baru mulai belajar Linux.

Mengikuti komentar, solusi yang lebih kuat yang menangani karakter khusus dengan baik adalah:

find . -type f -print0 | xargs -0 chmod 644  # For files
find . -type d -print0 | xargs -0 chmod 755  # For directories
Kaspar L. Palgi
sumber
Tetapi perintah kedua memberi saya pada banyak file output ini: chmod: tidak dapat mengakses the': No such file or directory chmod: cannot access Logo.txt ': Tidak ada file atau direktori chmod: tidak dapat mengakses `./blog/wp-content/themes/OneRoom/LOGO': Tidak ada file atau di pastoran
2
777berbahaya dan hanya berlaku untuk sebagian kecil sistem.
sarnold
2
Untuk meningkatkan perintah kedua Anda find . -type f -print0 | xargs -0 chmod 644,. Tidak -name "*"diperlukan, dan xargs(1)akan mem-parsing nama file pada spasi atau baris baru kecuali Anda menggunakan -0- yang mem-parsing nama file pada NULkarakter ASCII , yang tidak dapat muncul dalam nama file. The -print0untuk find(1)meminta untuk memformat output dalam mode cocok untuk xargs -0masukan.
sarnold
0

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

dipalu
sumber
2
Selamat datang di Superuser, harap diperhatikan 1 jawaban baris jarang diterima, dapatkah Anda menjelaskan lebih lanjut tentang jawaban Anda?
50-3