سؤال

وهذا الجزء "(-اسم * النص -o -اسم * أتش تي أم أل)" يخلط لي في التعليمات البرمجية:

find $HOME \( -name \*txt -o -name \*html \) -print0 | xargs -0 grep -li vpn

ويمكن للشخص أن يفسر الأقواس و"-o"؟ هي "-o" أمر أو معلمة؟ وأنا أعلم ونجا الأقواس بواسطة "\"، ولكن لماذا هم عنه؟

هل كانت مفيدة؟

المحلول

وافتراضيا، والظروف في القائمة حجة العثور هي 'and'ed معا. الخيار -o يعني 'أو'.

إذا كتب:

find $HOME -name \*txt -o -name \*html -print0

وبعد ذلك هناك أي إجراء الانتاج المرتبطة أسماء الملفات تنتهي مع "النص"، ولذلك لن تكون مطبوعة. من خلال تجميع الخيارات الاسم مع أقواس، وتحصل كل من "أتش تي أم أل" وملفات "النص".


وأطلع على سبيل المثال:

mkdir test-find
cd test-find
cp /dev/null file.txt
cp /dev/null file.html

وهذه التصريحات لها أدناه الجانبية ضوء اهتمام في هذا الشأن. إذا كان الأمر:

find . -name '*.txt' -o -name '*.html'

وبعد ذلك، منذ يتم تحديد أي إجراء صريح لأي بديل، و-print الافتراضي (وليس -print0!) يستخدم العمل لكل من البدائل وترد كلا الملفين. مع -print أو عمل صريح آخرين بعد واحد من البدائل (ولكن ليس غيرها)، وعندئذ فقط البديل مع عمل ساري المفعول.

find . -name '*.txt' -print -o -name '*.html'

وهذا يشير أيضا إلى أن هل يمكن أن يكون الإجراءات المختلفة للبدائل مختلفة. يمكنك أيضا تطبيق شروط أخرى، مثل وقت التعديل:

find . \( -name '*.txt' -o -name '*.html' \) -mtime +5 -print0

find . \( -name '*.txt'  -mtime +5 -o -name '*.html' \) -print0

وأول طباعة النص أو ملفات HTML التي يزيد عمرها عن 5 أيام (لذلك يطبع شيء عن الدليل سبيل المثال - كانت الملفات بضع ثوان القديمة)؛ طباعة الثانية TXT الملفات القديمة من 5 أيام أو ملفات HTML من أي عمر (حتى مجرد file.html). وهلم جرا ...

وبفضل DevSolar عن تصريحاته التي أدت إلى هذه الإضافة.

نصائح أخرى

وو"-o" يعني OR. أي يجب أن ينتهي الاسم في "النص" أو "أتش تي أم أل". الأقواس فقط مجموعة شرطين معا.

وو(و) توفير وسيلة للمعلمات البحث جماعة للأمر البحث. و-o هي المشغل "أو".

وهذا الأمر يجد سوف تجد جميع الملفات التي تنتهي في "النص" أو "أتش تي أم أل" وتمرير تلك كوسائط إلى الأمر البقرى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top