انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: خواندن چندین فایل با داشتن کلمات مشابه در نام  (دفعات بازدید: 497 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین zahra.shl

  • Newbie
  • *
  • ارسال: 14
سلام دوستان
دوستان ایا دستوری وجود داره که بتونیم با استفاده از آن چندین فایل txt که در نام آن ها یک کلمه مشابه مثلا app وجود داره رو همزمان با هم خواند؟

آفلاین M!lad

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1757
فایل‌ها با چه ساختاری کنار یکدیگر قرار گرفتند؟ در یک دایرکتوری هستند؟ در دایرکتوری‌های مختلف؟ به چه شکلی؟

منظور از همزمان خواندن دقیقا یعنی چه طور؟
..I feel no fault for the fault I feel..

آفلاین zahra.shl

  • Newbie
  • *
  • ارسال: 14
فایل ها در یک دایرکتوری قرار گرفته اند.
 همزمان منظورم اینه به جای اینکه تک تک فایل ها جداگانه خوانده بشن و عملیات مورد نظر روی ان ها انجام بشه . تمام فایل هایی که کلمه app در نام آنها وجود داره بدون توجه به بزرگ بودن یا کوچک بودن حروف در یک دستور خونده بشن  و عملیات مورد نظر را روی ان ها انجام بدم و نیازی نباشه تک تک آنها رو جداگانه بخونم.کلمه app در یک سری فایل ها با کلمات بزرگ و در یک سری فایل ها با کلمات کوچک ذخیره شده است

آفلاین مرتضی . م

  • High Hero Member
  • *
  • ارسال: 1121

آفلاین helium

  • Full Member
  • *
  • ارسال: 168
  • جنسیت : پسر
سلام، از فلگ i با دستور grep استفاده کنید.
grep -ri appاگر صرفا نام فایلی که عبارت مدنظر شما بدون توجه به کوچکی یا بزرگی عبارت مورد جست‌و‌جو مد نظر است فلگ l را استفاده کنید :
grep -ril app
به خدا چنان امیدوار باش که اگر گناه جن و انس را بیاوری به تو رحم کند.

لقمان حکیم

آفلاین zahra.shl

  • Newbie
  • *
  • ارسال: 14
ممنون دوستان

آفلاین M!lad

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1757
یک مقدار توضیحات اضافه کنم.

همونطور که گفتند می‌تونید از wildcard استفاده کنید.

فرضا به عنوان ورودی بنویسید:

*app*
یکی از مراحلی که قبل از اجرای یک دستور رخ میده، Filename Expansion هست. یعنی shell با توجه به wildcardهای تعیین شده، ورودی رو تبدیل می‌کنه به تمام فایل‌هایی که با الگو مورد نظر تطابق دارند. در مثال بالا *app* رو تبدیل می‌کنه به تمام فایل‌هایی که در نام اون‌ها app اومده.

این عمل در Bash رو بهش globbing میگن که case sensitive هست. در Bash میشه تنظیمی رو اعمال کرد که عملیات Globbing به حروف بزرگ و کوچک حساس نباشه. برای اینکار دستور زیر رو باید اجرا کنید:

shopt -s nocaseglob
حالا app در زیر شامل حروف بزرگ و کوچک هم خواهد شد:

*app*
برای مثال یک دایرکتوری با این محتویات رو در نظر بگیرید:

ls
10.txt  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt  app  App  appestici  aPPestici  laapp  laAPP  leappestici  leAPPestici

ls *app*
app  App  appestici  aPPestici  laapp  laAPP  leappestici  leAPPestici


اما باید این موضوع رو مدنظر قرار بدید که لازمه استفاده از globbing این هست که دستور مورد نظر شما بتونه چند ورودی رو دریافت و روی اون‌ها عملیات مورد نظر رو انجام بده.

نوشتن:

cat *app*
دقیقا مثل نوشتن دستور زیر هست:

cat app App appestici aPPestici laapp laAPP leappestici leAPPestici
cat تعداد متغیری ورودی رو قبول می‌کنه و همه اون‌ها رو پشت هم چاپ خواهد کرد. اما ممکن هست دستوری رو استفاده کنید که فقط ۱ ورودی بگیره. فرضا دستور uniq اولین اسم رو ورودی و دومی رو خروجی در نظر می‌گیره. درنتیجه بقیه فایل‌ها براش ورودی اضافی به نظر می‌رسند و درست کار نخواهد کرد.

در این حالت باید از loop یا دستوراتی مثل xargs و find استفاده کرد.
« آخرین ویرایش: 19 شهریور 1399، 06:38 ب‌ظ توسط M!lad »
..I feel no fault for the fault I feel..

آفلاین دانیال بهزادی

  • ناظر انجمن
  • *
  • ارسال: 19724
  • جنسیت : پسر
  • Urahara Kiesuke
    • وبلاگ
البته این‌جا ما تمرین‌های دیگران رو حل نمی‌کنیم!
اگه این ارسال بهت کمک کرد، دنبال دکمهٔ تشکر نگرد. به جاش تو هم به جامعهٔ آزادت کمک کن