سلام / خواهش میکنم
خب اگر نمیتونید جابجاشون کنید ./حتما باید دو قسمتش کنید یعنی یه جوری فایل هایی که قراره حذف بشه و اون هایی که قرار نیست حذف بشن رو جدا کنید.(مثلا بگید فایل هایی که آخر اسمش مثلا با ali.txt تموم میشه رو حذف نکن و یا اینکه بگید فایل هایی که اسمش با reza شروع میشه رو حذف کن)
یا اینکه بگید فایل هایی که حجمش بیشتر از فلان مقدار هست رو حذف کن یا بگید فایل هایی که از این تاریخ به بعد اضافه شده رو حذف کن یا حذف نکن خلاصه یجوری باید این دوتا رو از هم متامیز کنید و در نهایت اون فعلی که میخواید را روش پیاده کنید :
تو مثالی که من براتون زدم همه ی فایل های اون پوشه رو حذف میکنه به جز فایل هایی که اسمشون file_a هست :
find . -type f ! -name 'file_a' -exec rm -f {} \;
حالا شما میتونید بگید فقط فایل هایی رو حذف کن که اولش با ali شروع میشه : (با استفاده از همان سوییچ name)
find . -type f -name 'ali*' -exec rm -f {} \;
یا مثلا بگید فایل هایی رو حذف کن که آخرش با پسوند .mkv تموم میشه :
find . -type f -name '*.mkv' -exec rm -f {} \;
یا مثلا فایل هایی رو حذف کن که حرف سومش عدد باشه :
find . -type f -name '??[0-9]*' -exec rm -f {} \;
یا فایل هایی رو حذف کن که حرف چهارمش کاراکتر a
نباشه:(دقت کنید اینجا علامت تعحب گذاشتم که بهش بگم همه رو حذف کن به جز اونایی که حرف چهارمشون کاراکتر a نباشه)
find . -type f ! -name '???a*' -exec rm -f {} \;
همینجوری میتونید اونایی که میخواید رو غربال کنید و حذفشون کنید./
علامت * به معنای این هست که هر کاراکتری (چه عدد باشه چه حروف الفباباشه چه هرچیز دیگه ای که بود و به هر تعدادی)
علامت ؟ هم به معنای این هست که فقط یک کاراکتر و اون کاراکتر هم هرچیزی میتونه باشه
علامت سوال فرقش با ستاره اینکه علامت سوال فقط (
یک حرف یا
یک کاراکتر رو در نظر میگیره) ولی علامت ستاره به معنای هرچندتا کاراکتر که بود رو در نظر میگیره
برای خوندن مطالب بیشتر در رابطه با دستور find :
https://www.tehranhost.com/35-%D9%85%D8%AB%D8%A7%D9%84-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1-find-%D8%AF%D8%B1-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3/