پرسش و پاسخ شماره ۱۵ - آموزش اسکریپت نویسی
X
تبلیغات
پخش زنده جام جهانی

آموزش اسکریپت نویسی

آموزش اسکریپت نویسی پوسته گنو-لینوکس

#!/bin/bash

پرسش و پاسخ شماره ۱۵

پرسش و پاسخ شماره ۱۵

چگونه می‌توانم یک دستور را با تمام فایل‌های دارای پسوند ‎ .gz‎ اجرا کنم؟

غالباً یک فرمان تعدادی فایل را به عنوان شناسه می‌پذیرد، به عنوان مثال:

    zcat -- *.gz

در برخی سیستم‌ها، به جای zcat باید از gzcat استفاده کنید. اگر هیچ یک در دسترس نیستند، یا اگر علاقمند به انجام بازیهای حدسی نمی‌باشید، فقط از ‎ gzip -dc‎ به جای آن استفاده کنید.

کاربرد -- از ایجاد نتایج غیر منتظره ناشی از نام فایلهایی که با علامت خط تیره آغاز می‌شوند، ممانعت می‌کند.

اگر یک حلقه آشکار می‌خواهید یا اگر فرمان شما نمی‌تواند شناسه‌های چندتایی را در یک فراخوانی قبول کند، حلقه for می‌تواند به کار برود:

    # Bourne
    for file in ./*.gz
    do
        echo "$file"
        # "$file" انجام کاری با
    done

برای انجام آن به طور بازگشتی، از find استفاده کنید:

    # Bourne
    find . -name '*.gz' -type f -exec do-something {} \;

اگر به دلایلی لازم است فایلها داخل پوسته پردازش بشوند، پس نتایج find را در حلقه‌ای بخوانید:

    # Bash
    while IFS= read -r file; do
        echo "Now processing $file"
        #  "$file" انجام کار مورد علاقه با
    done < <(find . -name '*.gz' -print)

این مثال از جایگزینی پردازش استفاده می‌کند(همچنین پرسش و پاسخ 24 را ببینید) هرچند لوله نیز در بسیاری از وضعیت‌ها می‌تواند مناسب باشد. به هرحال، نام فایلهایی که شامل سطرجدید می‌باشند را به طور صحیح مدیریت نمی‌کند. برای مدیریت نام‌فایلهای دلبخواهی، پرسش و پاسخ 20 را ببینید.


CategoryShell

پرسش و پاسخ 15 (آخرین ویرایش ‎ 2010-07-30 14:32:06 ‎ توسط GreyCat)