কীভাবে ফোল্ডার এবং সেখানে সামগ্রী সরিয়ে ফেলা এবং বর্তমান ডিরেক্টরিতে ফাইল রাখবেন?
আগে
parent
├── folder1
├── folder2
│ ├── file1
│ ├── file2
├── folder3
├── file3
├── file4
└── file5
পরে:
parent
├── file3
├── file4
└── file5
কীভাবে ফোল্ডার এবং সেখানে সামগ্রী সরিয়ে ফেলা এবং বর্তমান ডিরেক্টরিতে ফাইল রাখবেন?
আগে
parent
├── folder1
├── folder2
│ ├── file1
│ ├── file2
├── folder3
├── file3
├── file4
└── file5
পরে:
parent
├── file3
├── file4
└── file5
উত্তর:
এর মতো কিছুতে কৌশলটি করা উচিত
cd parent
find . ! -path . -maxdepth 1 -type d -exec rm -rf {} \;
এটি বর্তমান কার্যক্ষম ডিয়ারের জন্য ডিরেক্টরিগুলি অনুসন্ধান করবে এবং কেবল 1 স্তর নীচে পুনরাবৃত্তি করবে এবং ডায়ারগুলি অপসারণ করবে। এটি করার আগে আরএম এর পরিবর্তে এলএসের সাহায্যে টেস্টারন সেরা করুন যাতে আপনি কী সরিয়ে ফেলা হবে তা পরীক্ষা করতে পারেন
cd parent
find . ! -path . -maxdepth 1 -type d -exec ls {} \;
উদাহরণ
jake@jake-HP /tmp/test $ tree
.
├── 1
├── 2
├── bar
│ ├── 1
│ ├── 2
│ └── 3
├── blah
│ ├── 1
│ ├── 2
│ └── 3
└── foo
├── 5
└── 9
3 directories, 10 files
jake@jake-HP /tmp/test $ find . ! -path . -maxdepth 1 -type d -exec ls {} \;
1 2 bar blah foo
1 2 3
5 9
1 2 3
jake@jake-HP /tmp/test $ find . ! -path . -maxdepth 1 -type d -exec rm -rf {} \;
jake@jake-HP /tmp/test $ tree
.
├── 1
└── 2
0 directories, 2 files
! -path .আপনি .ফোল্ডারটি বাদ দিতে যা খুঁজছেন
-exec ls -dF {} \; বা -exec ls --color -dF {} \;কেবল ডিরেক্টরিগুলির মধ্যে কী তালিকা রয়েছে তা এড়াতে।
find | xargs rmস্থান স্পেসিসহ ডিরেক্টরিগুলির (বা আরও খারাপ) বিশেষ অক্ষরগুলির উপস্থিতিতে অবাঞ্ছিত ফলাফল দেবে।
ফাইন্ড ব্যবহার করা ভাল কারণ আপনি ঠিক কী করতে চান তা নির্দিষ্ট করে। তবে জ্যাকের উত্তরের xargs এর ফাঁকে থাকা ডিরেক্টরিগুলির নামের সাথে সমস্যা রয়েছে has আপনাকে জার্গাগুলি অনুসন্ধান করতে প্রিন্ট 0 এবং -0 যোগ করতে হবে।
আমি লিখতাম
find parent -type d -mindepth 1 -maxdepth 1 -exec rm -rf '{}' \;
এটি আরও সহজ:
rm -rf parent/*/
এটি লুকানো ডিরেক্টরিগুলি (একটি সময়ের সাথে শুরু) সরিয়ে ফেলবে না যদিও আপনাকে এগুলি যুক্ত করতে হবে:
rm -rf parent/*/ parent/.[^.]*/
যদিও আপনার অন্যদিকে নির্দেশক চিহ্ন রয়েছে কিনা দেখুন।
আপনি যদি কেবল * ডিরেক্টরিতে মেলে * / তে বিশ্বাস না করেন তবে একটি কম পরিষ্কার সমাধান যা প্রচুর ত্রুটি তৈরি করে (এবং এটি গোপন ডিরেক্টরিগুলি বিবেচনায় নেয় না কারণ এটি জটিল হয়ে যায়) হ'ল
rm -rf parent/*/*
rmdir parent/*