find
فهرست
مقدمه
در لینوکس ابزار find هم مانند locate برای جست و جو بین فایل ها وجود دارد. اما با این تفاوت که find زمانی که شما برای جست و جو فایل آن را اجرا میکنید شروع به گردش در مسیری که مشخص کردید میکند اما locate داده های فایل ها را ار قبل داخل database نگهداری میکند.
ساختار وارد کردن دستور برای find به این صورت است که اولین آرگومان باید مسیر جست و جو باشد و بعد از مسیر سوییج ها و آپشن ها قرار میگیرند.
find /path/to/dir/ -name 'foo.bar' -type f
find میتواند regex دریافت کند.
پیدا کردن فایل
با استفاده از دستور find مسیر و یک نام برای جستجو میتوانید کارتان را با ابزار شروع کنید.
$ find ~ -iname '*log'
جستجو کردن بر اساس نوع
با سوییچ
-type
میتوانید بین نوع فایل/دایرکتوری ها تمایز قائل بشید. برای مثال فقط دایرکتوری هایی را
جست و جو کنید که شامل الگوی وارد شده باشد.
$ find /home -type d directoryname -iname 'musics'
لیست نوع های مختلف
b block (buffered) special
c character (unbuffered) special
d directory
p named pipe (FIFO)
f regular file
l symbolic link; this is never true if the -L option or the -follow option is in effect, unless the symbolic link is broken. If you
want to search for symbolic links when -L is in effect, use -xtype.
s socket
D door (Solaris)
پیداکردن فایل ها بر اساس حروف بزرگ و کوچک
اگر بخواهید در جستجویتان ابزار روی حروف بزرگتر و کوچکتر حساسیت نشان ندهد از سوییچ iname- استفاده کنید. برعکس همین دستور یعنی name- هم وجود دارد که در صورت استفاده ابزار به حروف بزرگتر و کوچکتر جساسیت نشان خواهد داد..
$ find /home/amirhosein/Downloads -iname 'BaR'
جستجو کردن بر اساس سطوح دسترسی
اگر میخواهید بر اساس پرمیژن ها به جستجو بپردازید میتوانید از آپشن prem استفاده کنید. در مثال زیر به دنبال فایلهایی با دسترسی ۷۷۷ هستیم.
$ find /home -type f -perm 777 -name amir.py
جستجو بر اساس تاریخ و ساعت
قبل از اینکه به جستجوی فایل ها بر اساس تاریخ و ساعت بپردازید لازم است بدانید که تغییرات در فایل های لینوکسی به چه صورت انجام میشود. Modified که با m مشخص می شود و به معنی تغییر در محتوای فایل است. Accessed که با a مشخص می شود که به معنی دسترسی ( خواندن ) فایل است. Changed که با c مشخص می شود و معادل با تغییر در متا دیتای ( Metadata ) فایل است. ولی محتوا دست نخورده باقی مانده است. در آپشن مورد استفاده برای این بخش اگر از time استفاده شود ، عدد مقابل آن به معنی روز است و اگر از min استفاده شد عدد مقابل آن معرف تعداد دقیقه است. به مثال های زیر توجه کنید.
# search by day
$ find /home -mtime 10
$ find /home -atime 10
$ find /home -ctime 10
# search by minute
$ find /home -mmin 10
$ find /home -amin 10
$ find /home -cmin 10
پیدا کردن فایل با پسوند خاص
اگر خواستید که فقط فایلهایی با پسوند خواص برای شما در جستجو نمایش داده شود از نمونه دستور زیر استفاده کنید.
$ find /home/amirhosein '*.jpeg'
پیداکردن فایل با حجم مشخص
اگر خواستید که فقط فایلهایی با حجم مشخص را ببینید از سوییچ size- استفاده کنید. اگر میخواستید که فایلهایی با بالاتر از حجم مشخص شده جستجو شود از علامت بعلاوه در کنار عدد مربوطه استفاده کنید.
$ find /home/Downloads -size 1G
Or
$ find /home/Downloads -size +100b
$ find /home/Downloads -size +100M
$ find /home/Downloads -size +1G
پیداکردن فایل هایی با چند فرمت مختلف
اگر خواستید که فایل هایی با چند فرمت مختلف را مشاهده کنید میتوانید از نمونه دستور زیر استفاده کنید.
$ find ~ ( -iname 'jpeg' -o -iname 'jpg' )
اجرای کامند روی مسیر هر یک از فایل های یافت شده
قطعا یکی از پرکاربرد ترین سوییچ های این ابزار سوییچ
-exec
هست، این سوییچ بعد از پیدا کردن فایل های مورد نظر دستوری که شما مشخص میکنید را روی
مسیر هر فایل اجرا میکند. مثلا ممکن است شما دستور
rm
را برای حذف فایل بنویسید و فایل ها را بعد از یافت شدن پاک کنید. و یا با ابزار
cp
فایل ها را از
محلی به محلی دیگر کپی کنید.
در این سوییچ دو نکته وجود دارد:
- مسیر هر فایل یافت شده در متغییر
{}
ذخیره میشود.- برای اینکه شما پایان دستورات را مشخص کنید باید از
;\
استفاده کنید
برای مثال ما تمامی فایل هایی که پسوندشان mp3 است را از دایرکتوری Downloads/~ پیدا میکنیم و بعد به دایرکتوری Music/~ منتقل میکنیم
find ~/Downloads -type f -iname '*mp3' -exec mv {} ~/Music \;