কীভাবে কেবল ডিরেক্টরিগুলির বিষয়বস্তু সরিয়ে ফেলবেন?


14

আমি একটি ফোল্ডার আছি: /var/myfolder

এর ভিতরে আরও কিছু ফোল্ডার রয়েছে যেমন: /var/myfolder/A/ /var/myfolder/B/ `/var/myfolder/C/ইত্যাদি etc.

প্রত্যেকের ভিতরে এলোমেলো নামের কিছু ফাইল রয়েছে। আমি কীভাবে সমস্ত ফাইলগুলি ভিতরে ফোল্ডার থেকে সরিয়ে ফেলব /var/myfolder?

কাঠামোর (সমস্ত ডিরেক্টরি যেমন, এ, বি, সি ইত্যাদি, ভিতরে /var/myfolder) অক্ষত থাকতে হবে।

উত্তর:


17

চেষ্টা করুন:

find /var/myfolder -type f -delete

এটি সমস্ত নিয়মিত ফাইলগুলিকে / var / মাইফোল্ডারের অধীনে পেয়ে যায় এবং কেবল ডিরেক্টরিগুলি রেখে সেগুলি মুছে দেয়।


সমাধানের জন্য ধন্যবাদ। আমার উল্লেখ করা উচিত যে আমি সোলারিস 9 এ এটি করছি, সুতরাং আমার সন্ধানের মধ্যে ডিলিট বিকল্প নেই, তবে এটি একটি ভাল সূচনা পয়েন্ট।
IroeN

2
আমি নিম্নলিখিত সমাধান নিয়ে আসতে সক্ষম হয়েছি: সন্ধান / var / মাইফোল্ডার-টাইপ এফ-এক্সেক আরএম -f {} \;
IroeN

2
দুঃখিত। আমি দেবিয়ান বা উবুন্টু ব্যবহার করি। আপনার সমাধান যতদূর আমি জানি সমান।
স্টারনামার

6
-type f! =! -type d
মাইক্রজারভ

7

Zsh সহ, কেবলমাত্র নিয়মিত ফাইলগুলির সাথে মেলে . গ্লোব যোগ্যতা ব্যবহার করুন :

rm -- **/*(.)

এটি বর্তমান ডিরেক্টরি এবং এর উপ-ডিরেক্টরিগুলি পুনরাবৃত্তভাবে সমস্ত (গোপনীয় নয়) নিয়মিত ফাইলগুলি মুছে দেয়। Dলুকানো নিয়মিত ফাইলগুলি (এবং গোপন ডিরেক্টরিতে নিয়মিত ফাইলগুলি) মুছতে গ্লোব যোগ্যতা যুক্ত করুন ।


আমি ব্যাশ ব্যবহার করছি
IroeN

1
@ ব্যবহারকারী 6554: ... যা আপনার প্রশ্ন বা ব্যবহৃত ট্যাগগুলি নির্দেশ করে না;)
0xC0000022L


3
find . -depth -exec rm {} + 2>/dev/null

rm ডিরেক্টরিগুলি সরিয়ে দেয় না - তাই এটি সবকিছুতে চালান।

ডিরেক্টরিগুলিতে প্রতিলিঙ্ক সংরক্ষণ করতে:

find .  ! -type d -exec sh -c '
    for f do [ -d  "$f" ] || 
          set "$@" "$f";  shift
    done; rm  "$@"' sh  {} +

এবং আমি মনে করি এটিতেও সম্ভবত কিছুটা অপ্টিমাইজড পদ্ধতিতে কাজ করা উচিত যদি উপরের সংস্করণে পরীক্ষার প্রয়োজন হতে পারে এমন অনেকগুলি ফাইল রয়েছে:

find . ! \( -type l -o -type d \)  \
-exec  rm {} + -o -exec  sh -c '
       for f do [ -d "$f" ] ||
       unlink "$f";done' sh {} +

নোট করুন যে GNU findএর জন্য একটি -xtypeবিকল্প রয়েছে ।
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস - অ্যাস্টও করে। তবে আমার মোটেও দরকার নেই - আমি ভাবি না। এত ত্রুটি কল এড়াতে আমি এটিকে শীর্ষে রেখেছি - নিঃশব্দ বা না - তবে অন্যদের মধ্যে এটি কেবল নির্বোধ ছিল।
মাইকজার্ভ

1
# This will delete all directory contents, including hidden files and
# subdirectories, without deleting the directory itself

# With GNU find:
find /path/to/directoryToEmpty -mindepth 1 -delete

# OpenBSD (and probably other BSDs)
find /path/to/directoryToEmpty -mindepth 1 -depth -exec rm -f {} \;

# To see what it deletes, in the order it will delete it:
find /path/to/directoryToEmpty -mindepth 1 -depth -print

0
rm var/myfolder/*/*

সাব সাব ফোল্ডারগুলিকে নিজেরাই স্পর্শ না করে সাব সাব ফোল্ডারের ভিতরে থাকা সমস্ত কিছু মুছে ফেলবে The

প্রথম *এর সাবডিরেক্টরি জন্য myfolderনিজেই ( A, B, ...)। দ্বিতীয় *ফাইল জন্য A, Bইত্যাদি

যদি সেখানে আরো ফোল্ডার ভেতরে A, Bইত্যাদি প্রথমবার চালনার: rm /var/myfolder/*/*/*তারপর চালানো rm /var/myfolder/*/*


0

আপনার কাছে প্রশ্নযুক্ত ডিরেক্টরি গাছের শীর্ষে সিডি করতে সক্ষম হওয়া উচিত, তারপরে চালনা করুন:

find . -type f -print0 | xargs -0 rm -rf

এবং এটি ডিরেক্টরি ট্রি অক্ষত রেখে যাওয়ার সময় সমস্ত ফাইল মুছে ফেলা উচিত। -প্রিন্ট0 এবং -0 বিকল্পগুলি বাদ দেওয়া যেতে পারে যদি আপনি আত্মবিশ্বাসী হন যে আপনার কাছে এমন কোনও ফাইল বা ডিরেক্টরি নাম নেই যাতে স্পেস থাকে।

ফাইন্ড কমান্ড ফাইল (-প্রকার চ) এবং লিঙ্কগুলির (-প্রকার l) এর মধ্যে পার্থক্য করে তাই এটি লিঙ্কগুলি অক্ষত রেখে দেওয়া উচিত, যদি কোনও হয়। যদিও পরীক্ষা করা হয়নি। সন্দেহ হলে চালাও:

অনুসন্ধান . টাইপ l

এবং দেখুন আপনি আগের ফাইন্ড কমান্ডটি চালানোর আগে কোনও কিছু প্রদর্শিত হয় কিনা।


আপনি কীভাবে ব্যাখ্যা করতে পারেন যে rmএটিতে পতাকা কীভাবে -r, -R, --recursive - remove directories and their contents recursivelyখাপ খায় ?
স্টিফেন রাউচ

কারণ আমরা আরএম-আরএফ চালাচ্ছি না, আমরা অনুসন্ধান চালিয়ে যাচ্ছি। -প্রকার চ এবং তারপরে আউটপুটটি পাইপ করে আরএম-আরএফ করুন। সুতরাং এটি কেবল ফাইলগুলি সরিয়ে দেয়, এটি ডিরেক্টরিগুলি স্পর্শ করে না। এটাই | xargs বিট করে, এটি বাম দিকের কমান্ড থেকে আউটপুট নেয় এবং ডানদিকে কমান্ডে প্রেরণ করে।
rjh427

আমার বক্তব্য। আপনি যদি কোনও ডিরেক্টরি পাস না করে থাকেন তবে এমন পতাকাটি কী ব্যবহার করবে যা কেবলমাত্র ডিরেক্টরিতে কাজ করে?
স্টিফেন রাউচ

কারণ পেশী মেমরি, এবং এটি এখনও কাজ করে। আপনি -f "বল" বিকল্পে একই আপত্তি তুলতে পারেন, আমি আপনাকে একই উত্তর দেব same
rjh427

-2

কেবল নীচের কমান্ডটি ব্যবহার করুন:

সুডো আরএম -আরএফ ডিরেক্টরি_ইন_ যে_আপনি_হভে_কন্টেন্ট / *

---------------- বা --------------------------------- -----------------------

'*' এর অর্থ দাঁড়ায় আপনি যখন * ব্যবহার করবেন যা সমস্ত সামগ্রী মুছে ফেলবে। সুতরাং হয় এরকম কমান্ড ব্যবহার করুন বা আপনি যে ডিরেক্টরিতে সমস্ত সামগ্রী মুছতে চান এবং কেবল নীচে কমান্ডটি ব্যবহার করতে চান সেই ডিরেক্টরিতে যান:

সুডো আরএম-আরএফ *

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