ডিরেক্টরি না করে সমস্ত ফাইল সরানোর আদেশ কী?


23

ধরা যাক আমার এর মতো ডিরেক্টরি গাছ আছে:

FOLDER:
    file1
    file2
    file3
    Subfolder1:
        file1
        file2
    Subfolder2:
        file1
        file2

যদি আমি ব্যবহার করি তবে ফোল্ডারের rm -r FOLDER/*সমস্ত কিছু উপ-ডিরেক্টরি সহ মুছে ফেলা হবে। প্রকৃত ডিরেক্টরিগুলি মোছা না করে আমি কীভাবে ফোল্ডার এবং এর উপ-ডিরেক্টরিগুলিতে সমস্ত ফাইল মুছতে পারি?

উত্তর:


37

আপনি যা করতে চেষ্টা করছেন তা হ'ল পুনরাবৃত্তি মোছা। তার জন্য আপনার একটি পুনরাবৃত্তির সরঞ্জাম প্রয়োজন, যেমন find

find FOLDER -type f -delete

13

সাথে bash:

shopt -s globstar  ## Enables recursive globbing
for f in FOLDER/**/*; do [[ -f $f ]] && echo rm -- "$f"; done

এখানে গ্লোব প্রসারিত ফাইলের নামগুলি পুনরুক্তি করা, এবং কেবলমাত্র ফাইলগুলি সরানো।

উপরেরগুলি শুকনো রান, যদি পরিবর্তনগুলি করাতে সন্তুষ্ট হয় তবে echoপ্রকৃত অপসারণের জন্য অপসারণ:

for f in FOLDER/**/*; do [[ -f $f ]] && rm -- "$f"; done

অবশেষে, আনসেট করুন globstar:

shopt -u globstar

সাথে zsh, গ্লোব কোয়ালিফায়ারকে লাভবান করে:

echo -- FOLDER/**/*(.)

(.) গ্লোব কোয়ালিফায়ার, এটি গ্লোব সম্প্রসারণকে কেবল নিয়মিত ফাইলের মধ্যে সীমাবদ্ধ করে।

উপরেরগুলি প্রকৃত অপসারণের জন্য কেবল ফাইলের নামগুলি মুদ্রণ করবে:

rm -- FOLDER/**/*(.)

2
Zsh গ্লোব্বিংয়ের জন্য +1। Zsh করতে পারে এমন দুর্দান্ত জিনিস সম্পর্কে আরও বেশি লোকের সচেতন হওয়া উচিত।
মার্সেলেম

11

যদি আপনার সংস্করণটি findসমর্থন না -deleteকরে তবে আপনি বর্তমান ডিরেক্টরিতে এবং নীচের প্রতিটি ফাইল মুছতে নিম্নলিখিতগুলি ব্যবহার করতে পারেন।

find . ! -type d -exec rm '{}' \;

-exec rm {} +দ্রুত হবে, বিশেষত যদি প্রচুর ফাইল থাকে।
مورু

এবং find . ! -type d -exec rm {} +পাশাপাশি সিম লিঙ্কগুলি সরিয়ে দেয়।
মনিকা

1
@ মুরু: একটি বিশেষ প্রয়োগ যদি এটি findসমর্থন না করে -deleteতবে সম্ভবত এটি সমর্থন করে না -exec ... {} +। এটির মোকাবিলার প্রস্তাবিত উপায় হ'ল find ... -print0 | xargs -r0 rm(যদি কেউ সম্ভাব্য অনেক ম্যাচ প্রত্যাশা করে)।
ডেভিড ফোরস্টার

5
পছন্দ করেছেন -exec ... {} +পসিক্স, তবে -deleteতা নয়। (হয় না -print0,
কোনওভাবেই নয়

@ মুরু: যথেষ্ট ফর্সা। আমি কমপক্ষে দুটি নন-পসিক্স findবাস্তবায়নের মুখোমুখি হয়েছি যা সমর্থন করেছে -print0তবে নয় -exec ... {} +( -deleteযদিও আমি এখনও মনে করি না )। এর একটি ওএস এক্সে ছিল, অন্যটি সোলারিসে (কয়েক বছর আগে খুব রক্ষণশীলভাবে আপডেট হওয়া সিস্টেমে)। আপনি এর -print0সাথে বিকল্প করতে পারেন -printf '%p\0'। যাইহোক, এটি জিজ্ঞাসা উবুন্টু এবং ইউনিক্স এবং লিনাক্স নয় এবং উবুন্টু চিরকাল থেকেই জিএনইউ অনুসন্ধান ব্যবহার করে।
ডেভিড ফোস্টার 13
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.