سؤال كيفية تعاقب chmod جميع الدلائل باستثناء الملفات؟


كيفية chmod 755 جميع الدلائل ولكن لا يوجد ملف (متكرر)؟

عكسيا ، وكيفية chmod الملفات فقط (بشكل متكرر) ولكن لا يوجد دليل؟


528
2018-01-06 01:56


الأصل


ذات صلة: قم بتغيير أذونات الملفات والمجلدات الخاصة بدليل إلى 644/755 في SO - kenorb
ذات صلة: تغيير كل أذونات المجلد بأمر واحد في U & L. - Scott


الأجوبة:


لتقديم بشكل متكرر الدلائل قراءة وتنفيذ الامتيازات:

find /path/to/base/dir -type d -exec chmod 755 {} +

لتقديم بشكل متكرر ملفات قراءة الامتيازات:

find /path/to/base/dir -type f -exec chmod 644 {} +

أو ، إذا كان هناك العديد من الكائنات التي تريد معالجتها:

chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)

أو ، للحد chmod وضع البيض:

find /path/to/base/dir -type d -print0 | xargs -0 chmod 755 
find /path/to/base/dir -type f -print0 | xargs -0 chmod 644

736
2018-01-06 01:58



يفشل المثالان الأولان للأدلة التي تحتوي على عدد كبير من الملفات: -bash: /bin/chmod: Argument list too long. يعمل الأمر الأخير مع العديد من الملفات ، ولكن عند استخدامه sudo يجب على المرء توخي الحذر من وضعه قبل xargs بدلاً من chmod: find /path/to/base/dir -type d -print0 | sudo xargs -0 chmod 755 - Agargara
أيضا أن نلاحظ ، هذه الأوامر هي شاملة من دير القاعدة. لذلك في المثال أعلاه ، dir سيتم أيضًا تعيينها على 755. - CenterOrbit
chmod ... $(find /path/to/base/dir -type ...) فشل لأسماء الملفات مع مسافات في الاسم. - Dan Dascalescu
أعتقد أن النسخة الصحيحة (ولكن ليس الأسرع) فيما يتعلق بالمسافات والرموز في أسماء الملفات وعدد الملفات find /path/to/base/dir -type d -exec chmod 755 {} \; (find /path/to/base/dir -type f -exec chmod 644 {} \;). - Peter K


سبب شائع لهذا النوع من الأشياء هو تعيين الدلائل إلى 755 ولكن الملفات إلى 644. في هذه الحالة هناك طريقة أسرع قليلا من نيك find مثال:

chmod -R u+rwX,go+rX,go-w /path

المعنى:

  • -R = متكرر
  • u+rwX = يمكن للمستخدمين القراءة والكتابة والتنفيذ ؛
  • go+rX = المجموعة والبعض الآخر يستطيع القراءة والتنفيذ ؛
  • go-w = المجموعة والبعض الآخر لا يستطيعون الكتابة

الشيء المهم أن نلاحظ هنا هو أن الأحرف الكبيرة X يتصرف بشكل مختلف إلى صغير x. في دليل يمكننا أن نقرأ:

يتم تعيين بتات التنفيذ / البحث إذا كان الملف عبارة عن دليل أو أي من بتات التنفيذ / البحث في الوضع الأصلي (غير المعدل).

بمعنى آخر ، لن يقوم chmod u + X في ملف بتعيين بت التشغيل ؛ وسيعمل g + X على تعيينه فقط إذا كان قد تم إعداده بالفعل للمستخدم.


265
2018-01-06 03:22



-R = متكرر ؛ u + rwX = يمكن للمستخدمين القراءة والكتابة والتنفيذ ؛ go + rX = group والبعض الآخر يمكن أن يقرأ وينفذ ؛ go-w = group ولا يستطيع الآخرون الكتابة - släcker
هذا النمط لن يصلح الموقف عندما يقوم شخص ما chmod -R 777 منذ +X لن يقوم الخيار بإعادة تعيين بتات التنفيذ الموجودة على الملفات. باستخدام -x سيتم إعادة تعيين الدلائل ، ومنع تنازلي فيها. - Andrew Vit
@ ring0: أنا لا أعتزم الإجابة على السؤال حرفيا كما طرحت - وقد فعلت نيك بالفعل ذلك تماما. أنا أشير إلى حل أرخص للحالة الأكثر شيوعًا. ونعم ، يمكنك الحصول على أذونات مختلفة للملفات والدلائل مع X، كما هو موضح في التعليقات. - bobince
go+rX,go-w -> go=rX أليس كذلك؟ - Pierre de LESPINAY
تستطيع ايضا استخذام chmod u-x,u+X في تركيبة ، وما إلى ذلك ، لإزالة بت البت للملفات ، ولكن إضافتها للأدلة. - w0rp


إذا كنت تريد التأكد من تعيين الملفات إلى 644 وكانت هناك ملفات في المسار والتي تحتوي على علامة التنفيذ ، يجب إزالة علامة التنفيذ أولاً. لا يقوم + X بإزالة علامة التنفيذ من الملفات الموجودة بالفعل.

مثال:

chmod -R ugo-x,u+rwX,go+rX,go-w path

تحديث: يبدو أن هذا يفشل لأن التغيير الأول (ugo-x) يجعل الدليل غير قابل للتنفيذ ، لذلك لا يتم تغيير جميع الملفات الموجودة تحته.


12
2018-01-22 16:14



هذا يعمل بالنسبة لي ، وأنا لا أرى السبب في ذلك. (بالتأكيد ، إذا فعلت للتو chmod -R ugo-x path، تلك ربما تكون مشكلة. لكن القيادة الكاملة ستفعل chmod u+rwX على كل دليل قبل أن يحاول النزول فيه.) ومع ذلك ، أعتقد ذلك chmod R u=rw,go=r,a+X path كافية - وهي أقصر. - Scott
لقد وجدت هذا يعمل بشكل صحيح. لم تكن هناك مشاكل مع دخول الدلائل - Someone Somewhere


قررت أن أكتب نصًا صغيرًا لهذا بنفسي.

البرنامج النصي للتكرار chmod لـ dirs و / أو الملفات - Gist

إنه يعمل أساسًا على chmod العودية ولكنه يوفر أيضًا بعض المرونة لخيارات سطر الأوامر (يحدد الدليل و / أو أذونات الملفات ، أو يستبعد كلاهما من إعادة تعيين كل شيء تلقائيًا إلى 755-644). كما يتحقق من بعض سيناريوهات الخطأ.

كتبت أيضا عن ذلك على مدونتي.


4
2017-09-18 14:00





لتقديم بشكل متكرر الدلائل قراءة وتنفيذ الامتيازات:

find /path/to/base/dir -type d -exec chmod 755 {} \;

لتقديم بشكل متكرر ملفات قراءة الامتيازات:

find /path/to/base/dir -type f -exec chmod 644 {} \;

متأخرا أفضل من عدم السماح لي بترقية إجابة نيك على جانب الصحة. حلّي أبطأ ، لكنه يعمل مع أي عدد من الملفات ، مع أي رموز في أسماء الملفات ، ويمكنك تشغيلها مع sudo بشكل طبيعي (لكن احذر من أنها قد تكتشف ملفات مختلفة مع sudo).


2
2018-02-21 11:58



هذا ال تخفيض من جواب نيك. لماذا تعتقد أن هناك أي خطأ في إجابة نيك؟ - Scott
Scott ، فشل إجابة نيك مع عدد كبير من الملفات (vey). - Peter K
أنا متأكد بنسبة 99٪ من أنك مخطئ. هل يمكنك تقديم أي دليل لدعم مطالبتك؟ - Scott
نعم ، يبدو أنني مخطئ بالفعل. تجد ... + يبدو لكسر الخط في أوامر متعددة ، صيد لطيف! - Peter K


جرب هذا البرنامج النصي python؛ فهو لا يتطلب أي تفريخ للعمليات ويقوم بعمل اثنين فقط من ملفات syscalls لكل ملف. وبصرف النظر عن تطبيق في C ، فإنه ربما يكون أسرع طريقة للقيام بذلك (كنت بحاجة إليها لإصلاح نظام ملفات من 15 مليون ملف والتي تم ضبطها كلها على 777)

#!/usr/bin/python3
import os
for par, dirs, files in os.walk('.'):
    for d in dirs:
        os.chmod(par + '/' + d, 0o755)
    for f in files:
        os.chmod(par + '/' + f, 0o644)

في حالتي ، كانت محاولة / catch مطلوبًا حول chmod الأخير ، نظرًا لأن chmodding بعض الملفات الخاصة فشلت.


0
2018-03-26 04:37





تستطيع ايضا استخذام tree:

tree -faid /your_directory | xargs -L1 -I{} bash -c 'sudo chmod 755 "$1"' -- '{}'

وإذا كنت تريد أيضا عرض المجلد إضافة صدى

 tree -faid /your_directory | xargs -L1 -I{} bash -c 'sudo chmod 755 "$1" && echo$1' -- '{}'

-1
2018-02-16 09:34



Scott 1) ​​أنت على حق حول + x غيرت إلى 755 ؛ 2) 3) لحل هذا أضع العنصر النائب في اقتباس مفرد مثل هذا "{}" - Eduard Florinescu
Scott أوافق على أن هذا ليس أفضل إجابة ، بل هو بطيء ، ولكنه سيغادر هنا لأغراض "تعليمي" ، كما ستوضح التعليقات أكثر ، كما يمكن للأشخاص التعرف على xargs مسائل. تمثل علامات الاقتباس المفردة في أسماء الملفات مشكلة بالنسبة للعديد من الأوامر والنصوص ، لذلك قمت بإدراج جميع الملفات التي تحتوي على علامات اقتباس مفردة وإزالتها (علامات الاقتباس) - Eduard Florinescu
Scott بحثت في أنظمتك عن جميع الملفات التي تحتوي على علامات اقتباس مفردة واستبدلت علامات الاقتباس الفردية - Eduard Florinescu
Scott كيف يمكنك إصلاح حقيقة أن xargs لا يحل بشكل صحيح ونقلت واحدة؟ - Eduard Florinescu
دعنا تابع هذه المناقشة في الدردشة. - Eduard Florinescu