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


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.