انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: MR-Mostafa در 28 امرداد 1396، 11:36 بظ
-
سلام
یه سوال در خصوص کامندهای ترمینال داشتم و اونم اینه که طبق توضیحات man ls، کامند ls به همراه آپشن -d باید دایرکتوریها رو نمایش بده ولی وقتی از این دستور استفاده میکنم همچین اتفاقی نمییوفته.
-d, --directory
list directories themselves, not their contents
خروجی این دستور همیشه عبارت زیر هست:
.
توی نت جستجو کردم گفته بودن که از دستور زیر استفاده کنم، سوالم این هست که چرا خوده آپشن -d به تنهایی همچین کاری رو نمیکنه؟
ls -d */
-
سلام
اگه اجازه بدین یه سری مقدمات رو توضیح بدم بعد برم سر سوالتون
اول اینکه . چیه ؟
کارکتر . به دایرکتوری فعلی اشاره می کنه می تونین این قضیه رو به این صورت چک کنین :
cd .
با زدن دستور بالا مسیر تغییر نمی کنه و رو همین مسیر فعلی می مونه
دوم اینکه .. چیه ؟
کارکتر .. به دارکتوری بالاتر اشاره می کنه و این قضیه رو به این صورت چک کنین :
cd ..
با زدن دستور بالا مسیر جاری به مسیر بالاتر تغییر پیدا می کنه
سوم اینکه آرگومان پیش فرض (در صورت عدم استفاده از آرگومان) دستور ls چیه؟
دستور ls از آرگومان پیش فرض . استفاده می کنه (تا محتوی پوشه ی فعلی رو نیشون بده) برای تست کردن این قضیه اگه شما این دو دستور رو اجرا کنین خروجی یکسانی خواهند داشت:
ls
ls .
حالا بریم سر سوالتون ...
برداشتی که من از man page دارم اینه که اون سوییچ -d برای نمایش صرفاً مسیرها نیست بلکه این سوییچ باعث می شه که در خروجی خود اون مسیرها و یا فایل ها به نمایش در بیان نه محتویات اونا (مثلا ls x محتویات x رو نیشون می ده ولی ls -d x خود x رو)
برای اثبات حرفم کافیه شما دستور زیر رو اجرا کنین :
ls -d *
این خروجی تمام فایل ها و مسیرهای غیر مخفی رو نیشون می ده چون اون * یعنی "هر چی"
حالا سوال ایجاست که اگه ls -d رو اجرا کنیم چی میشه ؟
اگه به اون قسمت سوم مقدماتی که توضیح دادم توجه کنین جواب این سوال رو می گیرین ...
طبق قسمت سوم این دو دستور با هم یکسان هستن (چون هیچ آرگومانی وارد نکردیم) :
ls -d
ls -d .
الان اگه شما دستور ll تو ترمینال بزنین (دستور ll یک alias از ls محسوب می شه و این alias تو توزیع های مختلف متفاوته و تو بعضی از توزیع ها اصن وجود نداره ولی تو اوبونتو برابر ls -alF هستش) یه عالمه چیز مختلف میاره ولی تنها چیزی که . هستش خود . هستش ! (مسیر فعلی با . نیشون داده می شه)
حالا اگه شما بخواین تمام فایل های و فولدر های مخفی رو نیشون بده (فایل ها و فولدرهای مخفی با . شروع می شن) باید دستور زیر رو بزنین :
ls -d .*
این یعنی با . شروع بشه بعدش هر چی بود ، بود ...
حالا اگه بخوایم مسیرها رو فقط نیشون بده باید چیکار کنیم ؟
شما دستور ls -F رو اجرا کنین اگه به خروجی دقت کنین می بینین که تمام مسیر ها به کارکتر / ختم شدن پس دستور ما باید این شکلی باشه :
ls -d */
یعنی اولش هر چی بود ، بود فقط آخرش / باشه
توجه۱: دقت کنین که اگه * رو وارد نکنیم یعنی اون اسم باید دقیقاً وجود داشته باشه و برای مثال ls -d . فقط خود . رو نیشون می ده)
توجه۲ :دقت کنین که اگه تو تمام دستورات بالا اون -d رو وارد نکنیم خروجی خود فایل ها و فولدرهایی که با الگو مطابقت دارن رو نیشون نمی داد بلکه محتویات اونا رو نیشون می داد (مثلا ls محتویات پوشه ی فعلی رو نشون می ده ولی ls -d خود پوشه ی فعلی رو)
اینم اضافه کنم شما برای دیدن مسیرهای موجود تو مسیر فعلی می تونین از دستور dir استفاده کنین
-
اگه به خروجی دقت کنین می بینین که تمام مسیر ها به کارکتر / ختم شدن
من اینو اضافه کنم که در خروجی اینجور فرمان ها، رنگ دایرکتوری ها با فایل ها متفاوت است، در نتیجه به راحتی میتوان آنها را شناسایی کرد.
فکر کنم استارتر جوابشو کامل گرفت. یک (حل شد) به آخر عنوان تاپیک اضافه شود.
-
ممنونم از لطفتون و صمیمانه تشکر میکنم که به سوالم پاسخ دادید.