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

کمک و پشتیبانی => انجمن عمومی => نویسنده: zahra.shl در 19 شهریور 1399، 02:23 ب‌ظ

عنوان: خواندن چندین فایل با داشتن کلمات مشابه در نام
ارسال شده توسط: zahra.shl در 19 شهریور 1399، 02:23 ب‌ظ
سلام دوستان
دوستان ایا دستوری وجود داره که بتونیم با استفاده از آن چندین فایل txt که در نام آن ها یک کلمه مشابه مثلا app وجود داره رو همزمان با هم خواند؟
عنوان: پاسخ : خواندن چندین فایل با داشتن کلمات مشابه در نام
ارسال شده توسط: M!lad در 19 شهریور 1399، 02:40 ب‌ظ
فایل‌ها با چه ساختاری کنار یکدیگر قرار گرفتند؟ در یک دایرکتوری هستند؟ در دایرکتوری‌های مختلف؟ به چه شکلی؟

منظور از همزمان خواندن دقیقا یعنی چه طور؟
عنوان: پاسخ : خواندن چندین فایل با داشتن کلمات مشابه در نام
ارسال شده توسط: zahra.shl در 19 شهریور 1399، 02:51 ب‌ظ
فایل ها در یک دایرکتوری قرار گرفته اند.
 همزمان منظورم اینه به جای اینکه تک تک فایل ها جداگانه خوانده بشن و عملیات مورد نظر روی ان ها انجام بشه . تمام فایل هایی که کلمه app در نام آنها وجود داره بدون توجه به بزرگ بودن یا کوچک بودن حروف در یک دستور خونده بشن  و عملیات مورد نظر را روی ان ها انجام بدم و نیازی نباشه تک تک آنها رو جداگانه بخونم.کلمه app در یک سری فایل ها با کلمات بزرگ و در یک سری فایل ها با کلمات کوچک ذخیره شده است
عنوان: پاسخ : خواندن چندین فایل با داشتن کلمات مشابه در نام
ارسال شده توسط: مرتضی . م در 19 شهریور 1399، 03:34 ب‌ظ
https://www.tecmint.com/use-wildcards-to-match-filenames-in-linux/ (https://www.tecmint.com/use-wildcards-to-match-filenames-in-linux/)
عنوان: پاسخ : خواندن چندین فایل با داشتن کلمات مشابه در نام
ارسال شده توسط: helium در 19 شهریور 1399، 04:03 ب‌ظ
سلام، از فلگ i با دستور grep استفاده کنید.
grep -ri appاگر صرفا نام فایلی که عبارت مدنظر شما بدون توجه به کوچکی یا بزرگی عبارت مورد جست‌و‌جو مد نظر است فلگ l را استفاده کنید :
grep -ril app
عنوان: پاسخ : خواندن چندین فایل با داشتن کلمات مشابه در نام
ارسال شده توسط: zahra.shl در 19 شهریور 1399، 04:23 ب‌ظ
ممنون دوستان
عنوان: پاسخ : خواندن چندین فایل با داشتن کلمات مشابه در نام
ارسال شده توسط: M!lad در 19 شهریور 1399، 06:35 ب‌ظ
یک مقدار توضیحات اضافه کنم.

همونطور که گفتند می‌تونید از 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 استفاده کرد.
عنوان: پاسخ : خواندن چندین فایل با داشتن کلمات مشابه در نام
ارسال شده توسط: دانیال بهزادی در 22 شهریور 1399، 03:05 ب‌ظ
البته این‌جا ما تمرین‌های دیگران رو حل نمی‌کنیم!