কীভাবে কেবল ফাইলগুলি মুছবেন, তবে ডিরেক্টরি কাঠামো রাখবেন?


16

আমি প্রতিটি ফাইল মুছতে চাই, তবে ফোল্ডারটির কাঠামো রাখি। কোন উপায় আছে?

দ্রষ্টব্য: (আমি জিএনইউ ব্যাশ ব্যবহার করছি 4.1.5)।


1
"বাদ দেওয়ার" অর্থ কী? আপনি কি কোন সাজানোর একটি আদেশ ব্যবহার করছেন? যদি তা হয় তবে দয়া করে এটি অন্তর্ভুক্ত করতে আপনার প্রশ্ন আপডেট করুন।
slm


আমি মনে করি আপনার অর্থ প্রতিটি ফাইল মুছুন।
slm

1
@slm আমি কমান্ডটি আপডেট করেছি আমি সাধারণত ফাইলগুলি বাদ দিতে ব্যবহার করি।
টম ব্রিটো

না আপনার নেই :-) বা, আপনি যদি তা করেন তবে আপনি এটি আবার সরিয়ে দিয়েছেন
মাওগ বলেছেন, মনিকা

উত্তর:


18

এটা চেষ্টা কর:

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

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

findআপনার মেশিনের সংস্করণ যদি এটি সমর্থন করে তবে আপনি এটি ব্যবহার করতে পারেন

find . ! -type d -delete

@ এসএলএম: আমি নিশ্চিত নই যে এটি কতটা পোর্টেবল। আমি এটিকে মাধ্যমিক বিকল্প হিসাবে যুক্ত করেছি। আমি কেবল বুঝতে পেরেছি যে আমার সম্পাদনা আমার উত্তরটি আপনার কাছে কার্যত অভিন্ন করেছে ident এর জন্যে দুঃখিত; এটা আমার উদ্দেশ্য ছিল না।

'{}' ফাইলগুলিতে ফাঁকা জায়গা থেকে রক্ষা করে? আমি আপনাকে সর্বদা ব্যবহার করে দেখছি এবং আমি মনে করি না যে এটির সাথে সমাধান পোস্ট করার আগে আমি এটি ব্যবহার করে দেখেছি।
slm

জিএনইউ থেকে ম্যানপেজটি সন্ধান করুন: "লক্ষ্য করুন যে বন্ধনীগুলি শেল স্ক্রিপ্টের বিরামচিহ্ন হিসাবে ব্যাখ্যা থেকে রক্ষা করতে একক উদ্ধৃতি চিহ্নগুলিতে আবদ্ধ রয়েছে" " যদিও প্রয়োজন হয় আমি নিশ্চিত নই। আমি বেশিরভাগ অভ্যাসের বাইরে এটি করি। findকমান্ড কখনো উদ্ধৃতি চিহ্ন দেখতে পায়। এটি {}চিহ্নিতকারীকে কেবল একটি যুক্তি হিসাবে দেখবে ।

আমি এটি উদাহরণে দেখতে পাচ্ছি, তবে টেমপ্লেটগুলি এটি " -exec command {} +" এবং এটি " -exec command ;" প্রদর্শন করে। আমি \;অতীতে কেবল কখনও '{}' ব্যবহার করি নি।
slm

@ এসএলএম: টেমপ্লেটগুলি সেমিকোলনের পলায়নও দেখায় না, যা চালানোর জন্য শেল ব্যবহার করার সময় সাধারণত প্রয়োজনীয় find। আমি মনে করি যে টেমপ্লেটগুলি হ'ল findআদেশটি কোন আর্গুমেন্টটি দেখানো বোঝানো হয়েছে এবং শেল সম্পর্কিত কোনও বিষয় নিয়ে চিন্তা করবেন না।

7

আপনি findপ্রতিটি ফাইল সনাক্ত করতে কমান্ডটি ব্যবহার করতে পারেন তবে ডিরেক্টরি কাঠামো বজায় রাখতে পারেন:

$ find /some/dir -type f -exec rm {} +

এই ইউনিক্স এবং লিনাক্স প্রশ্নোত্তর শিরোনাম অনুসারে: কিছু শেলের জন্য nu} গনু সন্ধান করে এবং মাস্কিং - কোনটি? , {}একক টিক্সের সাথে পালাতে ( ') বাশের মতো আধুনিক দিনের শাঁসগুলির সাথে আর প্রয়োজনীয় হবে না।


1

বর্তমান ডিরেক্টরি এবং উপ-ডিরেক্টরিগুলির প্রতিটি নিয়মিত ফাইল পুনরাবৃত্তভাবে মুছে ফেলার সহজ উপায়:

zsh -c 'rm **/*(.)'

টাইপ অনুসারে ফাইলের সাথে ম্যাচ করার জন্য কেবল zsh এর গ্লোব্বিং কোয়ালিফায়ার রয়েছে । তবে rmকমান্ড ডিরেক্টরিতে কাজ করে না, সুতরাং ব্যাশে আপনি ব্যবহার করতে পারেন

shopt -s globstar
rm **/*

এটি rmযদিও ছাড়া অন্য আদেশগুলির জন্য কাজ করে না । সাধারণভাবে, আপনি ব্যবহার করতে পারেন find:

find . -type f -delete

বা যদি আপনার findসমর্থন না করে -delete:

find . -type f -exec rm {} +

-2

ডিরেক্টরি কাঠামো মোছার সাথে পাথ এবং এর উপ ডিরেক্টরিগুলি (সময়কালে ফিল্টারিং) থেকে ফাইলগুলি মুছতে আমার অনুরূপ প্রয়োজনীয়তা ছিল।

এবং আমি নীচের ফর্ম্যাটটি ব্যবহার করেছি যা আমার পক্ষে কাজ করেছিল।

সন্ধান করুন / পরীক্ষা 123 / হোম / টেস্ট_ফিল_হিপ / ডেটা / এনএফএস -মাইটাইম +6-টাইপ চ-এক্সেক আরএম {} \;

সিনটেক্স: সন্ধান করুন (ফাইলের পথ) -মটাইম (দিনের চেয়ে বড় বা কম) -প্রকার f -exec rm {} \;

-type: "d" ডিরেক্টরিতে ফাইলের "f" ধরণের উল্লেখ করুন -exec: rd এক্সিকিউট করুন: {}: ফাইন্ড কমান্ডের আউটপুট

দ্রষ্টব্য: এটি ব্যবহারের আগে এটি পরীক্ষা করে দেখুন। দয়া করে নির্দ্বিধায় দ্বিধা বোধ করুন বা আমি কিছু মিস করেছি তবে আপডেট করুন।


1
যেহেতু এটি একটি অতিরিক্ত প্রয়োজনীয়তা যা ওপি দ্বারা উল্লেখ করা হয়নি, এবং যেহেতু প্রাথমিক find ... rmকাঠামোটি ইতিমধ্যে আচ্ছাদন করা হয়েছে, আমি নিশ্চিত নই যে এই প্রশ্নের নতুন উত্তর হিসাবে এটি একটি মূল্যবান অবদান।
জেফ শ্যাচলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.