আমি কীভাবে পুনরাবৃত্তভাবে সাব-ডাইরেক্টরিগুলি এবং ফাইলগুলি সরিয়ে ফেলব, তবে প্রথম অভিভাবক ডিরেক্টরিটি নয়?


13

আমি লক্ষ্য ডিরেক্টরিটি সরিয়ে ফেলতে এবং এর সমস্ত উপ-ডিরেক্টরি এবং সামগ্রীগুলি পুনরাবৃত্তভাবে অনুসরণ করতে নিম্নলিখিতটি ব্যবহার করতে সক্ষম।

find '/target/directory/' -type d -name '*' -print0 | xargs -0 rm -rf

তবে আমি চাই না যে লক্ষ্য নির্দেশিকাটি সরানো হোক। আমি কীভাবে লক্ষ্যবস্তু, উপ-ডিরেক্টরি এবং তাদের বিষয়বস্তুগুলির কেবলমাত্র ফাইলগুলি সরিয়ে ফেলতে পারি?

উত্তর:


11

আগের উত্তরটি প্রায় সঠিক। তবে আপনি যদি শেল গ্লোব অক্ষরগুলি কাজ করতে চান তবে আপনার উদ্ধৃতি দেওয়া উচিত নয় । সুতরাং, এটি সেই আদেশটি যা আপনি সন্ধান করছেন:

rm -rf "/target/directory with spaces/"*

মনে রাখবেন যে * ডাবল উদ্ধৃতিগুলির বাইরে। এই ফর্মটিও কাজ করবে:

rm -rf /target/directory\ with\ spaces/*

যদি আপনার *উপরে উল্লিখিত অনুসারে উদ্ধৃতিগুলি থাকে, তবে এটি কেবলমাত্র *লক্ষ্য ডিরেক্টরিতে অক্ষরে অক্ষরযুক্ত একক ফাইল সরিয়ে দেওয়ার চেষ্টা করবে ।


1
এটি লুকানো ফাইল এবং ফোল্ডারগুলির সাথে কাজ করে না। আমাকে এটির সাথে আরও একবার করতে হয়েছিল
আনফুন ক্যাট

8

আরও তিনটি বিকল্প।

  1. এর findসাথে -mindepth 1এবং ব্যবহার করুন -delete:

    Indmindepth স্তর
    স্তরগুলির চেয়ে কম স্তরে কোনও পরীক্ষা বা ক্রিয়া প্রয়োগ করবেন না (একটি অ-নেতিবাচক পূর্ণসংখ্যা)।
    মাইন্ডেপথ 1 এর অর্থ কমান্ড লাইন আর্গুমেন্ট ব্যতীত সমস্ত ফাইল প্রক্রিয়া করে।

    -delete
    মুছুন ফাইল; অপসারণ সফল হলে সত্য। অপসারণ ব্যর্থ হলে, একটি ত্রুটি বার্তা জারি করা হয়। যদি এডিলেট ব্যর্থ হয়, সন্ধানের প্রস্থান স্থিতিটি ননজারো হবে (যখন এটি শেষ পর্যন্ত প্রস্থান করবে)। এডিলেটের ব্যবহার স্বয়ংক্রিয়ভাবে −ডেপথ বিকল্পটি সক্রিয় করে।
    এই বিকল্পটি ব্যবহারের আগে সাবধানতার সাথে -ডেপথ বিকল্পটি দিয়ে পরীক্ষা করুন।

    # optimal?
    # -xdev      don't follow links to other filesystems
    find '/target/dir with spaces/' -xdev -mindepth 1 -delete
    
    # Sergey's version
    # -xdev      don't follow links to other filesystems
    # -depth    process depth-first not breadth-first
    find '/target/dir with spaces/' -xdev -depth -mindepth1 -exec rm -rf {} \;
    



২. findডিরেক্টরিতে নয় ফাইলগুলি ব্যবহার করুন । এটি প্রয়োজনীয়তা এড়িয়ে চলে rm -rf:

    # delete all the files;
    find '/target/dir with spaces/' -type f -exec rm {} \;

    # then get all the dirs but parent
    find '/target/dir with spaces/' -mindepth 1 -depth -type d -exec rmdir {} \;

    # near-equivalent, slightly easier for new users to remember
    find '/target/dir with spaces/' -type f -print0 | xargs -0 rm
    find '/target/dir with spaces/' -mindepth 1 -depth -type d -print0 | xargs -0 rmdir



৩. এগিয়ে যান এবং অভিভাবক ডিরেক্টরিটি সরান, তবে এটি পুনরায় তৈরি করুন। আপনি একটি আদেশ দিয়ে এটি করতে একটি বাশ ফাংশন তৈরি করতে পারেন; এখানে একটি সাধারণ এক-লাইনার:

    rm -rf '/target/dir with spaces' ; mkdir '/target/dir with spaces'

2

কেমন

rm -rf /target/directory\ path/*

যদি সেখানে ফাইলগুলি শুরু হতে পারে। লক্ষ্য ডিরেক্টরিতে।

rm -rf "/target/directory path/*" "/target/directory path/.??*"

বাদে, দ্বিতীয় দিয়ে শুরু করে সমস্ত কিছু মিলবে। এবং .. এটি .a এর মতো নামগুলিতে ব্যর্থ হবে তবে এটি খুব সাধারণ নয়। সমস্ত কেস কভার করার প্রয়োজনে এটি টুইট করা যেতে পারে।


আমি উভয় চেষ্টা করেছিলাম এবং তারা আমার পক্ষে কাজ করে না। সম্ভবত এটি কারণ যে আমার টার্গেট ডিরেক্টরিটির পথটিতে ফাঁকা স্থান রয়েছে? rm -rf '/ টার্গেট / ডিরেক্টরি পথ / *' এটি কোনও ত্রুটি দেয় না, তবে উপ-ডিরেক্টরিগুলি রয়ে গেছে।
মাইকেল প্রেসকোট

। আপনাকে হয় একটি ব্যাকস্ল্যাশ (\) স্থান সামনে, অথবা ( ") উদ্ধৃতির মধ্যে সমগ্র ডিরেক্টরির নাম পরিক্ষেপ দ্বারা শূণ্যস্থান অব্যাহতি প্রয়োজন আমি এই দেখানোর জন্য উদাহরণ সম্পাদনা করা হয়েছে।
KeithB

ধন্যবাদ, আমি চেষ্টা করেছি যা আমার আগের মন্তব্যে প্রদর্শিত হয়েছিল এবং এখনও যায় না। (আমি ওএস এক্স ব্যবহার করছি, এটি কি ব্যাপার?)
মাইকেল প্রেসকোট

ওএস এক্সের কাজ করা উচিত, এটি আমি ব্যবহার করছি। আপনি উভয় ব্যাকস্ল্যাশ এবং কোট ব্যবহার না করে তা নিশ্চিত করুন। কেবল একটি বা অন্যটি।
কিথবি

হ্যাঁ, কেবল উদ্ধৃতি ব্যবহার করছি। যদি আমি * অপসারণ করি এবং তাই আমি কেবল rm -rf "/ টার্গেট / ডিরেক্টরি পাথ /" ব্যবহার করছি "" ডিরেক্টরি পথ "ডিরেক্টরিটি" ডিরেক্টরি পথ "উপ ডিরেক্টরিতে বরাবর সরানো হবে। আমি যদি rm -rf "/ টার্গেট / ডিরেক্টরি পথ / *" ব্যবহার করি তবে কিছুই হয় না।
মাইকেল প্রেসকোট

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.