انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: zahra.shl در 19 شهریور 1399، 02:23 بظ
-
سلام دوستان
دوستان ایا دستوری وجود داره که بتونیم با استفاده از آن چندین فایل txt که در نام آن ها یک کلمه مشابه مثلا app وجود داره رو همزمان با هم خواند؟
-
فایلها با چه ساختاری کنار یکدیگر قرار گرفتند؟ در یک دایرکتوری هستند؟ در دایرکتوریهای مختلف؟ به چه شکلی؟
منظور از همزمان خواندن دقیقا یعنی چه طور؟
-
فایل ها در یک دایرکتوری قرار گرفته اند.
همزمان منظورم اینه به جای اینکه تک تک فایل ها جداگانه خوانده بشن و عملیات مورد نظر روی ان ها انجام بشه . تمام فایل هایی که کلمه app در نام آنها وجود داره بدون توجه به بزرگ بودن یا کوچک بودن حروف در یک دستور خونده بشن و عملیات مورد نظر را روی ان ها انجام بدم و نیازی نباشه تک تک آنها رو جداگانه بخونم.کلمه app در یک سری فایل ها با کلمات بزرگ و در یک سری فایل ها با کلمات کوچک ذخیره شده است
-
https://www.tecmint.com/use-wildcards-to-match-filenames-in-linux/ (https://www.tecmint.com/use-wildcards-to-match-filenames-in-linux/)
-
سلام، از فلگ i با دستور grep استفاده کنید.
grep -ri app
اگر صرفا نام فایلی که عبارت مدنظر شما بدون توجه به کوچکی یا بزرگی عبارت مورد جستوجو مد نظر است فلگ l را استفاده کنید :
grep -ril app
-
ممنون دوستان
-
یک مقدار توضیحات اضافه کنم.
همونطور که گفتند میتونید از 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 استفاده کرد.
-
البته اینجا ما تمرینهای دیگران رو حل نمیکنیم!