PDA

View Full Version : حذف فایل ها



oxygenws
سه شنبه 07 مهر 1383, 00:37 صبح
سلام،

وقتی می خوام تعداد خیلی زیادی فایل رو از تو لینوکس حذف کنم به اشکالی که نشون می ده پارامتر های ورودی به دستور rm (یا unlink) زیاد بوده بر می خورم.

این مشکل رو چطوری می شه حل کرد؟! دستور خاصی هست؟؟

ممنونم.

white fox
شنبه 11 مهر 1383, 19:51 عصر
مگه از چه option هایی استفاده میکنید؟....
من خودم به شخصه بخوام فایلهای زیادی رو پاک کنم که توش دایرکتوری هم باشد از دستور زیر استفاده میکنم.



rm -rf <filename>

که حتما خودتون این دستور رو میدونید...تا به حال هم مشکلی نداشتم.....
شما با کاربر root هم امتحان کردید؟..همین ایرادو میگیره؟
متن اخطار هم اگه بزارید شاید دوستان بتونن کمک کنن

oxygenws
پنج شنبه 16 مهر 1383, 14:52 عصر
شرمنده، نمی دونم چرا پست شما رو ندیده بودم!!!

بله، من با این دستورات کار می کنم. با root هم وارد شدم.

متن اخطار رو الان نمی تونم بدم، ولی سعی می کنم درستش کنم :) فایل های ذکر شده رو توسط محدود کردن انتخاب هام تونستم پاک کنم. مثلا:

rm -f [a-g]*

یه مورد دیگه، تعداد فایل ها خیلی زیاد باشند، در حد ۳۰ هزار تا فایل در یک شاخه :)

oxygenws
شنبه 18 مهر 1383, 15:34 عصر
من اونقدر فایل ساختم و مشکل برگردونده شده مثل زیر هستش:

bash: /bin/rm: Argument list too long


در ضمن، از اونجایی که حدس می زنم مشکل دوستان متخصصی که جواب نمی دن اینه که این همه فایل ندارند که بخوان پاکش کنند، برای تستشون، این برنامه شلی که نوشتم رو کپی و در شل اجرا کنید.(خودتون که واردید :) ) (یادتون نره که اول یک شاخه درست کنید، البته ابتدای نام تمام فایل ها عبارت om رو می ذاره تا مشکل خاصی پیش نیاد)


for (( i = 0; i < 30000; i++ )) do
touch om$i
str=`expr $i % 1000`
if [ $str -eq 0 ]
then
echo $i;
fi
done


اجراش چیزی حدود ۲-۳ دقیقه روی سیستم من طول کشید.

بعد از اتمام اجرای این دستور rm -f رو بزنید و ...

ممنون می شم جواب این سوالم رو بدید :)

موفق باشید، امید

hosseinzadeh
جمعه 24 مهر 1383, 12:35 عصر
http://yml.com/icms/icms.php/?COMP=clog_list&cmd=dosearch&cat_ref=3

oxygenws
جمعه 24 مهر 1383, 13:04 عصر
ممنون جناب حسین زاده :)
راه حل جالبیه ولی فکر کنم کمی کند باشه (کند تر از rm معمولی)

توضیح مختصری از من: :D

دستوری که پیشنهاد داده شده اینه:

for i in `ls`; do rm -f $i; done
این [مجموعه] دستور تمامی فایل ها رو دونه دونه پاک خواهد کرد. البته توانایی پاک کردن شاخه ها رو نداره. ولی با حالت زیر می تونه شاخه ها رو هم پاک کنه:

for i in `ls`; do rm -rf $i; done

ممنون،
موفق باشید، امید

oxygenws
جمعه 24 مهر 1383, 13:18 عصر
پست شما من رو راه انداخت :wink3:

روش های زیر موثر تر و سریع تر عمل می کنند:

ls | xargs rm -f
این شاید بهترین و ساده ترین روشی باشه که بشه به کار برد.


find * -exec rm {} \;
این روش به دلیل استفاده از find قاعدتا باید کمی کند عمل کنه (باز هم من دقیق نمی دونم)

:flower:

oxygenws
جمعه 24 مهر 1383, 13:21 عصر
یه توضیح جالب:
اول از همه این دستور رو توی لینوکس اجرا کنید:

getconf ARG_MAX

بعد:

The kernel gives you a buffer of that size. The shell tries to put
the contents of the '*' glob expansion into that buffer. It can't.
The argument list is too long. It fails. The ls command is not run
in that case.

این خط رو بیشتر دقت کنیم:

The ls command is not run in that case.

:wink3:
امید