با عرض سلام مجدد، اگر شما با سیستمها و سرورهای enterprise کار کرده باشید میدانید که گاهی ممکن است نیاز باشد تعداد زیادی log را که به طور مثال در یک دایرکتوری هستند را پاک کنید یا حداقل با توجه به زمان بخواهید که لاگ فایلهای ۵ روز آخر را نگه داشته و باقی را پاک کنید. اگر تعداد فایلها زیاد باشد شما در استفاده از دستور rm با پیغام زیر مواجه میشوید:
-bash: /bin/rm: Argument list too long
که این پیغام به دلیل زیاد بودن تعداد فایلها میباشد.
برای رفع این مشکل شما میتوانید از دستورات زیر استفاده کنید
find /u01/app/11.2.0/grid/cdata/xxx-cluster/* -mtime +5 -exec rm -f {} \;
برای اینکه قبل از انجام عمل پاک کردن از فایلهایی که قرار است پاک شوند لیستی داشته باشید تا بتوانید آن را چک کنید از دستور زیر استفاده کنید:
find /u01/app/11.2.0/grid/cdata/xxx-cluster/* -mtime +5 -exec ls -lrt {} \;
در دستور find سوئیچ mtime به معنای زمان modify شدن است. سوئیچهای دیگری نیز در find وجود دارد (atime,ctime,…) که بنا به نیاز میتوان از هریک از آنها استفاده کرد.
نکته: سه نوع timestamp وجود دارد:
- Access - the last time the file was read
- Modify - the last time the file was modified (content has been modified)
- Change - the last time meta data of the file was changed (e.g. permissions)
میتوانیم دستور بالا را به صورت زیر نیز اجرا کنیم:
find /u01/app/11.2.0/grid/cdata/xxx-cluster/* -mtime +5 -exec ls -lrt {} +
تفاوت exec ls -lrt {} + و exec ls -lrt {} \; :
تفاوت در {} + و {} \; است که با توجه به نیاز باید از یکی از آنها استفاده کرد. {} + تمام خروجی دستور find را به صورت یکجا به ls میدهد ولی {} \; تک تک خروجیهای find را به صورت یک به یک به ls میدهد.
توضیحات بیشتر در مورد تفاوت در
https://askubuntu.com/questions/339015/what-does-mean-in-a-linux-command
- ۹۶/۱۲/۲۱