چگونه یک دایرکتوری بزرگ در لینوکس را حذف کنیم؟
آیا دایرکتوریهای پر از پروژههای قدیمی، مجموعه دادهها، لاگها یا عکسهایی دارید که فضای زیادی را در هارد دیسک شما اشغال میکنند؟ آیا میخواهید یاد بگیرید که چگونه آنها را به سرعت و به راحتی با استفاده از دستورات ساده در لینوکس حذف کنید؟ در این مطلب آموزش حذف دایرکتوریها با هزاران فایل در لینوکس را با استفاده از دستورات و گزینههای مختلف به شما نشان خواهیم داد.
از سرعت و کارآمد بودن این دستورات و اینکه چقدر فضای دیسک را میتوانید در عرض چند دقیقه آزاد کنید، شگفت زده خواهید شد!
چرا هزاران فایل را همزمان حذف کنیم؟
اگر به طور حرفهای از کامپیوتر استفاده میکنید، ممکن است به مرور زمان فایلهای زیادی را روی هارد دیسک خود ذخیره کرده باشید. این فایلها میتوانند شامل اسناد، عکسها، فیلمها، موسیقی و غیره باشند. برخی از این فایلها ممکن است مهم و مفید باشند، در حالی که برخی دیگر ممکن است قدیمی و غیر ضروری باشند.
در ادامه چند سناریوی احتمالی وجود دارد:
- یک توسعه دهنده وب هستید و یک پوشه پروژه دارید که حاوی هزاران فایل مانند HTML، CSS، جاوا اسکریپت، تصاویر و غیره است. می خواهید پوشه پروژه را حذف کنید زیرا دیگر به آن نیاز ندارید یا میخواهید از ابتدا شروع کنید.
- یک تحلیلگر داده هستید و دایرکتوری دارید که حاوی هزاران فایل CSV است که هر کدام حاوی دادههایی است که شما پردازش یا تجزیه و تحلیل کردهاید. شما میخواهید دایرکتوری را حذف کنید زیرا تجزیه و تحلیل خود را به پایان رساندهاید و میخواهید مقداری فضای دیسک را آزاد کنید.
- یک مدیر سیستم هستید و دایرکتوری دارید که حاوی هزاران فایل log است که هر کدام رویدادها یا خطاهای سیستم را ضبط میکنند. شما میخواهید دایرکتوری را حذف کنید زیرا مشکلات را حل کردهاید.
- شما یک عکاس هستید و دایرکتوری دارید که حاوی هزاران تصویر RAW است که هر کدام لحظاتی را که با دوربین خود گرفتهاید ثبت میکند. میخواهید دایرکتوری را حذف کنید، زیرا تصاویر را ویرایش یا پشتیبانگیری کردهاید، یا میخواهید فضا را برای عکسهای جدید باز کنید.
داشتن فایلهای بیش از حد میتواند بر عملکرد کامپیوتر و فضای دیسک شما تاثیر بگذارد. بنابراین، توصیه میشود به صورت دورهای فایلهایی را که دیگر نیازی ندارید یا نمیخواهید حذف کنید.
آموزش حذف دایرکتوری در لینوکس
راههای مختلفی برای حذف یک فایل یا پوشه در لینوکس وجود دارد. بیایید نگاهی به برخی از این راهها بیندازیم.
با این حال، هنگام استفاده از این دستورات مراقب باشید، زیرا غیر قابل برگشت هستند و در صورت استفاده نادرست ممکن است فایلهای مهم را حذف کنند.
همیشه مسیر و گزینهها را قبل از اجرای آنها دوبار بررسی کنید.
با استفاده از دستور rm
دستور rm یکی از رایج ترین و اساسیترین دستورات برای حذف فایلها و پوشهها در لینوکس است. برای حذف یک پوشه و تمام محتویات آن میتوانید از گزینه -r که مخفف Recursive است استفاده کنید.
به عنوان مثال، اگر میخواهید دایرکتوری به نام پروژه را حذف کنید، می توانید از دستور زیر استفاده کنید:
rm -r project
با این حال، اگر فایلهای زیادی در دایرکتوری وجود داشته باشد، این دستور ممکن است زمان زیادی طول بکشد و خروجی زیادی تولید کند. برای سرعت بخشیدن به فرآیند و سرکوب خروجی می توانید از گزینه -f که مخفف force است استفاده کنید.
این گزینه فایلها و پوشهها را بدون درخواست تایید یا نمایش هیچ پیامی حذف میکند.
rm -rf project
با استفاده از دستور Find
همچنین میتوانید از دستور find استفاده کنید که یک دستور قدرتمند و انعطاف پذیر برای یافتن و ویرایش فایلها و پوشهها در لینوکس است.
برای حذف یک پوشه و تمام محتویات آن، میتوانید از گزینه -delete استفاده کنید که تمام فایلها و پوشهها را در یک مسیر مشخص پیدا و حذف میکند. مانند:
find project -delete
دستور find همچنین گزینههای زیادی دارد که به شما امکان میدهد فایلها را بر اساس معیارهای مختلف مانند الگو، تاریخ، زمان یا اندازه به صورت انتخابی حذف کنید.
با استفاده از دستور rsync
دستور rsync به طور کلی برای انتقال و همگام سازی فایلها بین دستگاههای لوکال و ریموت به روشی کارآمد استفاده میشود. از الگوریتم خاصی استفاده میکند که فقط تفاوت بین فایلهای مبدا و مقصد را ارسال میکند که باعث کاهش استفاده از شبکه و سرعت بخشیدن به انتقال میشود.
این روش میتواند برای سناریوهای مختلفی مانند بکاپ گیری، mirroring، به روز رسانی، کپی کردن، یا حتی حذف فایلها و پوشهها استفاده شود. برای حذف یک پوشه با استفاده از rsync، میتوانید از دستور ساده زیر استفاده کنید:
rsync -a --delete source/ destination/
این دستور محتویات پوشه source را با پوشه destination همگام میکند و هر فایل یا زیرپوشهای را در destination که در source وجود ندارد حذف میکند. گزینههای استفاده شده در این دستور عبارتند از:
- a- حالت آرشیو، که تقریبا همه چیز را حفظ می کند (مانند symbolic links، مجوزهای فایل، مالکیت کاربر و گروه، و timestamp).
- delete-- حالت حذف، که فایلهای اضافی را از محل destination حذف میکند.
توجه داشته باشید که باید یک اسلش (/) بعد از نام پوشه source و destination اضافه کنید، در غیر این صورت rsync آنها را به عنوان نام فایل در نظر می گیرد و یک زیرپوشه در مقصد ایجاد میکند.
به عنوان مثال، اگر از rsync -a --delete source destination استفاده میکنید، rsync یک پوشه فرعی به نام source در destination ایجاد میکند و محتویات پوشه source را با آن همگام میکند.
با استفاده از دستور shred
Shred برای پاک کردن یا از بین بردن دائمی پروندهها استفاده میشود تا کسی نتواند آنها را بازیابی کند. بهتر از حذف معمولی است، زیرا حذف معمولی فقط ارجاع (reference) به فایل را در فایل سیستم حذف میکند، اما دادههای واقعی (actual data) روی دیسک باقی میمانند تا زمانی که توسط دادههای دیگر بازنویسی شوند.
یک فایل حذف شده را می توان با استفاده از نرم افزار یا ابزارهای سخت افزاری ویژهای که میتواند دیسک را برای یافتن آثار داده اسکن کند، بازیابی کرد. Shred با بازنویسی چندین بار فایل با دادههای تصادفی از این امر جلوگیری نموده و بازسازی دادههای اصلی را غیرممکن میکند.
Shred همچنین یک رونویسی(overwrite) نهایی با صفر اضافه میکند تا این واقعیت که فایل shred شده است را پنهان کند. بنابراین، خرد کردن، امن تر و قابل اعتمادتر از حذف به طور معمول است، به خصوص برای فایلهای حساس یا محرمانه.
برای shred کردن یک سند در لینوکس، می توانید از دستور ساده زیر استفاده کنید:
shred -uvfz document
این دستور چندین بار دادهها را در فایل سند بازنویسی نموده و بازیابی دادهها را برای نرم افزار و سخت افزار شخص ثالث سختتر میکند. گزینههای استفاده شده در این دستور عبارتند از:
- u- فایل یا دایرکتوری را پس از بازنویسی با دادههای تصادفی حذف میکند.
- v- حالت verbose که اطلاعات فایلهای shred شده را نشان میدهد.
- f- حالت فورس، که مجوزها را تغییر میدهد تا در صورت لزوم اجازه نوشتن بدهد.
- z- حالت صفر، که یک رونویسی نهایی با صفر برای پنهان کردن shred کردن اضافه میکند.
دستور shred را فقط م توان برای حذف فایلها و نه پوشهها استفاده کرد. با این حال، میتوان از آن همراه با دستورات دیگر برای ایجاد اسکریپتهای خودکار استفاده کرد که کل دایرکتوریها را shred میکند.
به عنوان مثال، میتوانید از دستور find به همراه گزینه -exec برای اجرای دستور shred در هر فایلی که find یافت میشود استفاده کنید. در ادامه مثالی از نحوه shred کردن و حذف همه فایلهای موجود در دایرکتوری به نام secret آورده شده است:
find secret -type f -exec shred -u {} \;
این دستور تمام فایل های موجود در پوشه secret را پیدا میکند و دستور shred را با گزینه -u روی هر کدام از آنها اجرا میکند.
با این حال، توجه داشته باشید که دستور shred بر این فرض متکی است که فایل سیستم زیربنایی، همان physical block را هنگام نوشتن دادههای جدید بازنویسی میکند. بسیاری از فایل سیستمهای جدیدتر از این فرض پیروی نمیکنند و ممکن است از تکنیکهایی مانند journaling، copy-on-write، یا wear leveling استفاده کنند که ممکن است از تخریب موثر دادهها توسط فرمان shred جلوگیری کند. بنابراین ممکن است shred در برخی از فایل سیستمهای مانند ext3، ext4، btrfs، xfs و غیره آن طور که انتظار میرود کار نکند.
خرید سرور مجازی در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.
حذف انتخابی فایلها
بسته به معیارهایی که میخواهید استفاده کنید، روشهای مختلفی نیز وجود دارد که از طریق آنها میتوان فایلها را به صورت انتخابی در لینوکس حذف کرد. در ادامه چند نمونه آورده شده است:
حذف فایل ها بر اساس الگو
می توانید از دستور rm با یک کاراکتر عام (*) استفاده کنید که با هر تعداد کاراکتر مطابقت دارد. به این ترتیب، میتوانید فایلهایی را که با یک الگوی خاص مطابقت دارند، مانند فایلهایی با پسوند، نام یا پیشوند خاص حذف کنید.
برای مثال، اگر میخواهید تمام فایلهایی را که پسوند txt در دایرکتوری فعلی دارند حذف کنید، میتوانید از دستور زیر استفاده کنید:
rm *.txt
اگر میخواهید تمام فایلهایی را که با پیشوند test در دایرکتوری فعلی شروع میشوند حذف کنید، میتوانید از دستور زیر استفاده کنید:
rm test*
حذف فایل ها بر اساس تاریخ یا زمان
میتوانید از دستور find با گزینههای مختلفی استفاده کنید که فایلها را بر اساس تغییر آنها (-mtime یا -mmin)، تغییر (-ctime یا -cmin)، یا دسترسی (-atime یا -amin) زمان آنها مکانیابی میکنند.
این گزینهها یک عدد را به عنوان آرگومان گرفته که میتواند قبل از آن علامت مثبت (+) یا علامت منفی (-) قرار گیرد. علامت مثبت به معنای بیشتر از عدد داده شده است، در حالی که علامت منفی به معنای کمتر از عدد داده شده است.
این عدد میتواند روز (-mtime یا -ctime) یا دقیقه (-mmin، -cmin، یا -amin) باشد.
به عنوان مثال، اگر میخواهید تمام فایل هایی را که بیش از 10 روز پیش در دایرکتوری فعلی تغییر داده شدهاند حذف نمائید، میتوانید از دستور زیر استفاده کنید:
find . -mtime +10 -delete
اگر میخواهید تمام فایلهایی را که کمتر از 30 دقیقه پیش در دایرکتوری فعلی به آنها دسترسی پیدا کردهاند، حذف نمائید، میتوانید از دستور زیر استفاده کنید:
find . -amin -30 -delete
حذف فایل ها بر اساس اندازه
میتوانید از دستور find با گزینه -size استفاده نموده که فایلها را بر اساس اندازه آنها پیدا میکند.
این گزینه یک عدد را به عنوان آرگومان میگیرد که پس از آن میتوان پسوندی را نشان داد که واحد اندازه گیری را نشان میدهد. پسوند می تواند بایت (b)، کیلوبایت (k)، مگابایت (M)، گیگابایت (G) یا بلوک (c) باشد.
علامت مثبت (+) یا علامت منفی (-) قبل از عدد به ترتیب به معنای بزرگتر یا کوچکتر از آن است.
به عنوان مثال، اگر میخواهید تمام فایلهایی را که حجم آنها بیش از 100 مگابایت است را در دایرکتوری فعلی حذف کنید، میتوانید از دستور زیر استفاده کنید:
find . -size +100M -delete
اگر میخواهید تمام فایلهایی را که حجم کمتر از ۱ کیلوبایت در دایرکتوری فعلی دارند حذف کنید، میتوانید از دستور زیر استفاده کنید:
find . -size -1k -delete
جمع بندی
حذف فایلها در لینوکس ممکن است یک اقدام ساده به نظر برسد، اما بسیاری از تفاوتها و چالشهای پنهان وجود دارد که ممکن است با آنها مواجه شوید. در این مطلب آموزش حذف پوشهها با تعداد فایلهای زیاد در لینوکس را با استفاده از دستورات و گزینههای مختلف توضیح دادهایم.
همچنین بررسی کردیم که چگونه فایلها را بر اساس معیارهای مختلف مانند الگو، تاریخ، زمان یا اندازه حذف کنید. با این حال، هنگام استفاده از این دستورات باید مراقب باشید، زیرا غیر قابل برگشت هستند و در صورت استفاده نادرست ممکن است فایلهای مهم را حذف کنند. همیشه مسیر و گزینهها را قبل از اجرای آنها دوبار بررسی کنید.