انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


ارائه ۲۴٫۱۰ اوبونتو منتشر شد 🎉

نویسنده موضوع: استثنا کردن یک فایل در زمان کپی یا حذف(حل شد)  (دفعات بازدید: 839 بار)

0 کاربر و 2 مهمان درحال مشاهده موضوع.

آفلاین Mr-virus

  • Full Member
  • *
  • ارسال: 136
  • جنسیت : پسر
سلام دوستان.بنده یک سوال دارم.فرض کنید قصد دارید تمام فایل های موجود در یک دایرکتوری رو حذف کنید به استثنای file_a.
سوالم این هست چطور اینو استثنا کنیم؟
« آخرین ویرایش: 27 آبان 1397، 05:44 ب‌ظ توسط Mr-virus »

آفلاین hamid123

  • Jr. Member
  • *
  • ارسال: 38
  • جنسیت : پسر
پاسخ : استثنا کردن یک فایل در زمان کپی یا حذف
« پاسخ #1 : 26 آبان 1397، 05:08 ب‌ظ »
سلام چندتا راه هست برای اینکار/
مثلا میتونید اون فایل هایی رو که نمیخوای حذف یا جابجا کنی رو اول به جای دیگه انتقال بدی بعد کاری که میخواید رو انجام بدید./
 یا اینکه میتونید از دستور find همه ی فایل هایی که میخواید روش کاری انجام بدین رو به استثنائ یک سری دیگه انتخاب کنید بعد حالا روش هر دستوری رو اعمال کنید :


find . -type f ! -name 'file_a' -exec rm -f {} \;

در اون قسمتی که حرف دات رو نوشتم دقیقا بعدا کلمه ی کلیدی find به معنای اینکه در همین پوشه ای که داخلش هستیم عمل سرچ رو انجام بده و اون علامت تعجب به معنای not هست که میتونید به جاش از -not هم استفاده کنید و اون سوییچ -name هم همون فایل هایی هستن که نمیخواید روشون کاری انجام بده ./ و در آخر سوییچ exec هست که بعد از این سوییچ میتونید هر دستوری رو قرار بدید و اون دستور روی تک تک فایل هایه پیدا شده اعمال میشه که من اینجا از دستور rm استفاده کردم. در نتیجه همه ی فایل های درون همین پوشه به استثنائ فایل file_a رو حذف میکنه.
حالا شما میتونید به جای دستور rm دستور mv بذارید :

find . -type f ! -name 'ff' -exec mv {} FOLDER \;

اینجا هم هرچی پیدا کرد رو انتقال میده تو پوشه ی FOLDER.

راه های دیگه ای هم هست. اما خودم بشخصه یا اونایی که میخوام رو اول جدا میکنم. یا این کار رو میکنم

نکته ی دیگه ای هست اینکه خود دستور find سوییچ delete داره یعنی میتونید دیگه از سوییچ exec استفاده نکنید همون جا فقط کافیه بنویسید -delete تا عمل حذف رو بر روی تک تک فایل های پیداشده انجام بده. :

find . -type f ! -name 'file_a' -delete



توصیه میکنم اول خوب این دستور رو امتحان کنید اگر باهاش اشنایی ندارید (حتما گوگل کنید در مورد دستور find ) بعد اینکار رو انجام بدین چون ممکنه به اشتباه فایل هاتون رو حذف کنید و دیگه بر نگرده

موفق باشید

آفلاین Mr-virus

  • Full Member
  • *
  • ارسال: 136
  • جنسیت : پسر
پاسخ : استثنا کردن یک فایل در زمان کپی یا حذف
« پاسخ #2 : 26 آبان 1397، 05:43 ب‌ظ »
سلام و خیلی ممنونم بابت وقتی که اختصاص دادید.در واقع من میخوام بدون جابجا کردن این کارو انجام بدم.در مثالی  که زدید نمیتونم استفاده کنم.چون فرض کنید من فقط اسم فایلی که قرار هست حذف بشه رو دارم و اسم بقیه فایل هارو نمیدونم یا اسم ها متفاوت هستن و از یک سری نیستن و تعداد خیلی زیاد هست.مثلا برای حذف همونطور که خودتون میدونین از
rm -f *
استفاده میکنیم و اینطوری تمام فایل ها در مسیر جاری یا مشخص شده حذف میشن.اما من میخوام اگر فایلی با اسم file_a بود اون فایل حذف نشه.

آفلاین hamid123

  • Jr. Member
  • *
  • ارسال: 38
  • جنسیت : پسر
پاسخ : استثنا کردن یک فایل در زمان کپی یا حذف
« پاسخ #3 : 26 آبان 1397، 08:21 ب‌ظ »
سلام / خواهش میکنم
خب اگر نمیتونید جابجاشون کنید ./حتما باید دو قسمتش کنید یعنی یه جوری فایل هایی که قراره حذف بشه و اون هایی که قرار نیست حذف بشن رو جدا کنید.(مثلا بگید فایل هایی که آخر اسمش مثلا با 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/

آفلاین Silvio Dante

  • High Hero Member
  • *
  • ارسال: 1221
  • جنسیت : پسر
  • Arch Linux
    • وبلاگ شخصی
پاسخ : استثنا کردن یک فایل در زمان کپی یا حذف
« پاسخ #4 : 27 آبان 1397، 10:32 ق‌ظ »
درود،
اگر از پوسته‌ی bash استفاده می‌کنین با این دستور می‌تونین این کار رو انجام بدین:
rm -- !(file_a)اگر بین فایل‌ها، پوشه هم وجود داره باید اینطوری عمل کنین:
rm -rf !(file_a)
در zsh هم به این صورته:
rm -- ^file_arm -rf ^file_a
به ما نگفته بودند ایران در زمان احمدشاه قاجار چگونه بوده است. همیشه به ما دادند، ما هم فکر کردیم باید می‌داده‌اند و تازه خیال می‌کردیم کم‌مان است باز هم می‌خواستیم!!
فریدون فرخزاد

آفلاین Mr-virus

  • Full Member
  • *
  • ارسال: 136
  • جنسیت : پسر
پاسخ : استثنا کردن یک فایل در زمان کپی یا حذف
« پاسخ #5 : 27 آبان 1397، 11:03 ق‌ظ »
ممنون.
اگر بخوام چند فایل یا دایرکتوری رو استثنا کنم به چه صورت هست؟داخل براکت قرار دادم ارور داد و با کالن هم جدا کردم داخل پرانتز کالن رو جزئی از اسم فایل میدونه و بقیه رو حذف میکنه و در نتیجه همه حذف میشن.

آفلاین Silvio Dante

  • High Hero Member
  • *
  • ارسال: 1221
  • جنسیت : پسر
  • Arch Linux
    • وبلاگ شخصی
پاسخ : استثنا کردن یک فایل در زمان کپی یا حذف
« پاسخ #6 : 27 آبان 1397، 02:21 ب‌ظ »
ممنون.
اگر بخوام چند فایل یا دایرکتوری رو استثنا کنم به چه صورت هست؟داخل براکت قرار دادم ارور داد و با کالن هم جدا کردم داخل پرانتز کالن رو جزئی از اسم فایل میدونه و بقیه رو حذف میکنه و در نتیجه همه حذف میشن.
خواهش می‌کنم.
باید از کاراکتر پایپ "|" استفاده کنین.
با فرض اینکه شما یه فایل دیگه با نام file_b دارین میشه به این صورت:
rm -rf !(file_a|file_b)
به ما نگفته بودند ایران در زمان احمدشاه قاجار چگونه بوده است. همیشه به ما دادند، ما هم فکر کردیم باید می‌داده‌اند و تازه خیال می‌کردیم کم‌مان است باز هم می‌خواستیم!!
فریدون فرخزاد

آفلاین Farhaad 1992

  • Hero Member
  • *
  • ارسال: 943
  • جنسیت : پسر
  • گنو با گنوم
پاسخ : استثنا کردن یک فایل در زمان کپی یا حذف
« پاسخ #7 : 27 آبان 1397، 04:20 ب‌ظ »
اوووف! بابا به جای اینهمه فرمان و کد نویسی، از مدیر فایل ranger استفاده کنید! این مدیر فایل توانایی انتخاب گزینشی فایل ها و فولدرها را دارد، قابلیتی که متاسفانه من تا حالا ندیدم هیچ مدیر فایل گرافیکی آن را داشته باشد، کار کردن با ranger بسیار آسان است و سرعت بسیار بالایی هم دارد، یک قابلیت بسیار جالب آن، توانایی انتخاب یک فایل برای کپی شدن، و افزودن موارد بیشتر برای کپی شدن پس از آن است و سپس پیست کردن همه آنها، بازهم قابلیتی که در مدیر فایل‌های گرافیکی وجود ندارد.

https://en.wikipedia.org/wiki/Ranger_(file_manager)
بسیار سریع و کم حجم
« آخرین ویرایش: 27 آبان 1397، 04:22 ب‌ظ توسط فرهاد محمدی مجد »
* نام کاربری حساب من Fedora-Red Hat است ولی نام نمایهٔ (پروفایل) من، نام حقیقی + سال تولد من است
* از دی ۱۳۹۸ دیگر فعالیت پیوسته و دائم ندارم
* نظرات و ارسال‌های من فقط در زمان ارسال خود معتبر بودند و نشان‌دهنده طرز فکر و سطح دانش فعلی من نیستند

آفلاین Mr-virus

  • Full Member
  • *
  • ارسال: 136
  • جنسیت : پسر
پاسخ : استثنا کردن یک فایل در زمان کپی یا حذف
« پاسخ #8 : 27 آبان 1397، 05:44 ب‌ظ »
متشکرم از همه دوستانی که مشارکت کردن و پاسخ دادن