سؤال
وهذا الجزء "(-اسم * النص -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 هي المشغل "أو".
وهذا الأمر يجد سوف تجد جميع الملفات التي تنتهي في "النص" أو "أتش تي أم أل" وتمرير تلك كوسائط إلى الأمر البقرى.