در این مطلب که بیشتر برای ارجاع خودم در آینده آماده شده شیوهی مدیریت فایلها در ترمینال را تشریح میکنم.
به دلایل مختلفی ممکنه بخوایم از ترمینال به مدیریت فایلها بپردازیم
توضیحات این صفحه به هیچ عنوان کامل نیست :) من فقط نکاتی که به نظرم کاربردی بودن رو اینجا گفتم.
قاعدتا اولین دستور ls
هست برای فهرست کردن فایلهای موجود. برای نمایش توضیحات این دستور، ls --help
رو وارد میکنیم اما آرگیومنتهای پرکاربرد اینها هستن:
آرگیومنت | توضیحات |
-l |
نمایش هر فایل در یک خط با توضیحات اضافه شامل نوع فایل، دسترسیها، اندازه فایلها و زمان آخرین ویرایش |
-F |
نمایش / در انتهای نام دایرکتوریها |
-S |
مرتب سازی بر اساس اندازه فایل از بزرگترین به کوچکترین |
-r |
برعکس کردن ترتیب فایلها |
-lh |
نمایش سایز فایلها در فرمت قابل خوانش (مگابایت، گیگابایت و...) |
-a |
نمایش فایلها و دایرکتوریهای مخفی (که نامشان با . شروع میشود) |
-R |
نمایش فایلهای موجود در سابدایرکتوریها |
معمولا دستور زیر یه خروجی مناسب و کاربردی بهم میده:
ls -lha
اما بر فرض محال، در شرایط خاص اگه عجله داشته باشم و بخوام یه لیست کامل از تمام محتویات یه دایرکتوری خاص دربیارم این دستور رو اجرا میکنم:
ls -lharFRS > ~/list.txt
برای تغییر دایرکتوری از cd استفاده میکنیم :) توضیحات خاصی نداره!
cd
به تنهایی ما رو به user home directory منتقل میکنهcd ~
هم باز ما رو به user home directory هدایت میکنه اما اگه بعد از ~ یه یوزرنیم وارد کنیم به home directory مربوط به همون کاربر منتقل میشیمcd -
ما رو به آخرین دایرکتوری برمیگردونه! مثلا اگه در /home/usr/Downloads
باشیم بعد دستور cd ~/Music
رو بزنیم به /home/usr/Music
منتقل میشیم و حالا با cd -
به /home/usr/Downloads
برمیگردیم.در استفاده از این دستور مراقب باشید، مثلا find ~ -delete
میتونه همهی فایلهای شخصی رو حذف کنه!
کلیت دستور find به این شکله:
find [options] [path] [expression]
که در options
تعریف میکنیم چه رفتاری با پیوندهای نمادین (symbolic links) داشته باشه؟ بعد در path
تعریف میکنیم که جستجو رو باید از کجا شروع کنه؟ و نهایتا در expression
تعریف میکنیم که دنبال چه چیزی بگرده و باهاش چه کار کنه؟
البته این کلیت دستور هست و این بخشها الزامی نیستند، حالا توضیحات تفصیلیتر:
در بخش options
در این بخش رفتار مطلوب در مقابل symbolic links رو تعریف میکنیم.
-P |
حالت پیشفرض: پیوندهای نمادین را دنبال نکرده و اطلاعات مربوط به خودِ پیوند مرجع میشود. |
-L |
همواره پیوند نمادین را دنبال کرده و همچنین اطلاعات مربوط به مقصد پیوند مورد ارجاع قرار گیرد. |
-H |
پیوند نمادین را دنبال نمیکند اما برای دستورات CLI، اطلاعات مقصد پیوند مرجع خواهند بود. |
-D |
چاپ موارد مربوط به دیباگ برنامهی find |
در بخش expression
عمده دستکاریهای ما در این بخش هستند! اینجا تعریف میکنیم دنبال چه فایلی میگردیم یا چه بلایی میخوایم سرش بیاریم :)
نکته: هر کجا از عدد در دستور استفاده کنیم میتونیم +
یا -
قبل از عدد بیاریم که به معنای بیشتر یا کمتر از اون عدد خواهد بود.
|
جستجو بر اساس نام یا پسوند با حساسیت به حروف کوچک و بزرگ |
|
جستجو بر اساس نام یا پسوند بدون حساسیت به حروف کوچک و بزرگ |
find ~ -name name.txt find ~ -iname name.txt find ./ -name "*name*" find ./ -iname "*name*" find ./ -name "*.ext" find ./ -iname "*.ext"
|
جستجو بر اساس سایز |
ما میتونیم برای سایز واحد تعریف کنیم: c
برای بایت؛ k
برای کیلوبایت؛ M
برای مگابایت و G
برای گیگابایت.
تمام فایلهایی که دقیقا ۱ گیگابایت حجم دارند | find -type f -size 1G |
فایلهایی با پسوند txt که بیش از ۵۰ کیلوبایت حجم دارند |
find -type f -name '*.txt' -size +50k |
فایلهایی با حجم بین ۵ تا ۱۵ مگابایت در دانلودها | find ~/Downloads -type f -size +5M -size -15M |
|
حذف فایلهای یافت شده! |
دقت کنید که چون find
از چپ به راست اجرا میشه -delete
رو همیشه در انتها قرار بدین.
حذف فایلها و دایرکتوریهای خالی | find ~ -empty -delete |
حذف تمام فایلها در پوشه دانلودها و نه سابدایرکتوریها | find ~/Downloads -type f -maxdepth 0 -delete |
حذف هر فایلی با نام test.txt در دانلودها و سابدایرکتوریها | find ~/Downloads name test.txt -delete |
ما میتونیم از find بخوایم هر دستوری (خارج از تعریفات خود برنامه) روی فایلهای یافت شده اجرا کنه:
-exec command {} \; |
اجرای command روی فایلها و دایرکتوریهای یافت شده بدون کسب اجازه |
-ok command {} \; |
اجرای command روی فایلها و دایرکتوریهای یافت شده با کسب اجازه |
پیشنهاد میکنم همیشه قبل از اجرای هر دستوری روی فایلها اول یه بار دستور ls رو اجرا کنید تا لیستی از فایلهایی که قراره تغییر کنن ببینید و احتمال اشتباه کمتر بشه:
find -exec ls {} \;
چند مثال تکمیلی:
تغییر مجوز دسترسی به تمام فایلهای .php
در دایرکتوری /var/www
و سابدایرکتوریها:
find /var/www -iname '*.php' -exec chmod 664 {} \;
جابجا کردن تمام فایلهای .PDF
از دایرکتوری دانلودها (و نه سابدایرکتوریها) به /home/PDFs
:
find ~/Downloads -iname '*.pdf' -exec mv {} /home/PDFs/ \;
حذف فایلهای خالی با دستور rm
:
find ~ -type f -empty -ok rm {} \;
حذف فایلهای با حجم بالاتر از ۲ گیگابایت با کسب اجازه:
find ~ -type f -size +2G -ok rm{} \;
یافتن تمام فایلها به جز فایلهای .png در دانلودها و ذخیره سازی نتیجه در یک فایل txt:
find ~/Downloads -type f -not -iname '*.png' > ~/myfile.txt find ~/Downloads -type f -not -iname '*.png' -fls ~/myfile.txt
برای باز کردن یک فایل خاص در ترمینال از دستور xdg-open
استفاده میکنیم؛ این دستور فایل رو با برنامه پیشفرض باز میکنه، در صورتی که برنامه پیشفرض تعریف نشده باشه ارور میده و در صورتی که به جای آدرس فایل، آدرس وبسایت وارد کنیم، اونو با مرورگر پیشفرض باز میکنه.
xdg-open '~/Downloads/file.txt' => text editor xdg-open 'https://matinu.ir' => Browser