در قسمت های اول و دوم دستور find با چگونگی استفاده از این دستور آشنا شدید. find دستوریست بسیار قدرتمند برای یافتن فایل بر اساس معیار های گوناگون، مانند صاحب فایل، حجم فایل، جستجو در سطحی مشخص از سیستم فایل و … در این پست چگونگی پیدا کردن فایل ها بر اساس زمان گفته خواهد شد. هر فایل شامل سه مهر زمانی Change Time,Access Time و Modify Time است. در ادامه سوئیچ های مرتبط با هر کدام از Timestamp های گفته شده در دستور find گفته می شود.
- atime- : زمان دسترسی (زمانی که فایل خوانده می شود).
- ctime- : زمان تغییر خصوصیات فایل.
- mtime- : زمان تغییر محتوای فایل.
با استفاده از دستور stat می توانستیم اطلاعات زمانی بالا را پیدا کنیم. اگر با دستور cat فایلی را بخوانید به آن دسترسی داشته اید و زمان Access Time تغییر می کند. اگر با دستوری مانند vi محتوای یک فایل متنی را تغییر دهید زمان های Modify Time و Change Time تغییر می کند. اگر با دستور chmod مجوز های فایل را تغییر دهید زمان Change Time تغییر می کند. و برای دایرکتوری ها نیز، اگر با دستور cd تغییر دایرکتوری به دایرکتوری جدید دهید، زمان Access Time آن دایرکتوری جدید تغییر خواهد کرد. اگر با دستور هایی مانند mkdir یا touch فایل یا دایرکتوری جدیدی را ایجاد کنید یا اگر نام فایل یا دایرکتوری را تغییر دهید، زمان های Modify Time و Change Time تغییر می کنند و در نهایت مانند فایل، اگر مجوز را با دستور chmod تغییر دهید، زمان Change Time تغییر خواهد نمود. شکل کلی استفاده از آنها به صورت زیر است.
find SEARCH_PATH -atime X
find SEARCH_PATH -mtime X
find SEARCH_PATH -ctime X
X نشان دهنده روز است و اگر :
- با یک + بیاید، معرف فایل ها / دایرکتوری های دسترسی شده/تغییر کرده پیش از X روز
- با یک – بیاید، معرف فایل ها و دایرکتوری های دسترسی شده/تغییر کرده درون X روز گذشته
- بدون هیچ علامت و به تنهایی بیاید، معرف فایل ها/دایرکتوری های دسترسی شده/تغییر کرده دقیقا X روز پیش
بطور مثال برای فهرست کردن تمامی فایل های زیر دایرکتوری etc/ که دقیقن 7 روز پیش تغییر کرده اند از دستور زیر استفاده کنید.
find /etc -mtime 7
یا برای لیست کردن تمامی دایرکتوری هایی که در 7 روز گذشته مورد دسترسی قرار گرفته اند از دستور زیر استفاده کنید.
find / -atime 7 -type d | less
برای پیدا کردن تمامی فایل ها با پسوند sh. که پیش از 7 روز پیش تغییر کرده اند از دستور زیر استفاده کنید.
find ~ -mtime +7 -name “.sh” | less
برای پیدا کردن فهرستی از فایل هایی که حجمی برابر 1 مگابایت دارند و در 7 روز گذشته تغییر کرده اند از دستور زیر استفاده کنید.
find / -type f -size 1M -mtime -7 | less
دستور زیر فهرستی از فایل های pdf که در 30 روز گذشته مورد دسترسی قرار گرفته اند را نشان می دهد.
find ~ -iname “*.pdf” -atime -30 -type -f
سوئیچ iname- مانند سوئیج name عمل می کند ولی بر خلاف name، حساس به متن (بزرگی و کوچکی حروف) نیست.
در مثال های بالا از سوئیچ هایی استفاده کردیم که خروجی را بر اساس X روز گذشته نشان می دادند. اگر بخواهیم که خروجی بر اساس X دقیقه پیش باشد باید به از سوئیچ های زیر استفاده کنیم.
- amin- : زمان دسترسی (زمانی که فایل خوانده می شود).
- cmin- : زمان تغییر خصوصیات فایل.
- mmin- : زمان تغییر محتوای فایل.
و فرمت کلی آنها به صورت زیر است.
find SEARCH_PATH -amin X
find SEARCH_PATH -mmin X
find SEARCH_PATH -cmin X
X نشان دهنده روز است و اگر :
- با یک + بیاید، معرف فایل ها / دایرکتوری های دسترسی شده/تغییر کرده پیش از X دقیقه
- با یک – بیاید، معرف فایل ها و دایرکتوری های دسترسی شده/تغییر کرده درون X دقیقه گذشته
- بدون هیچ علامت و به تنهایی بیاید، معرف فایل ها/دایرکتوری های دسترسی شده/تغییر کرده دقیقا X دقیقه پیش
برای یافتن تمامی دایرکتوری های زیر دایرکتوری etc/ که پیش از 1 ساعت گذشته دسترسی شده اند از دستور زیر استفاده کنید.
find /etc -type d -amin +60
برای فهرست کردن تمامی فایل هایی که دقیقن 30 دقیقه قبل با پسوند sh. زیر دایرکتوری خانگیتان تغییر کرده اند از دستور زیر استفاده کنید.
find ~ -name “.sh” -type f -mmin 30 | less