পুনরাবৃত্তভাবে ফাইলগুলি সরান


140

ম্যাক থেকে একটি লিনাক্স সার্ভারে ফাইল স্থানান্তরিত করার পরে যেগুলি পায় সেগুলি ._ এবং .ডিএসএসটিস্টোর ফাইলগুলি মুছে ফেলার জন্য কারও কাছে কি সমাধান আছে?

একটি সূচনা ডিরেক্টরি নির্দিষ্ট করুন এবং এটি যেতে দেওয়া? লাইক / ভার / www / এইচটিএমএল / ডাউন ...


: যদিও এটা সদৃশ নয় আইএমও, আপনি এই কটাক্ষপাত করা উচিত stackoverflow.com/questions/1280429/...
Grundlefleck

যদিও আপনি যা জিজ্ঞাসা করছেন তা নয়। আমি যুক্তি দিয়ে বলছি এটি আরও ভাল সমাধান: unix.stackexchange.com/questions/9665/…
ভিক্টর

উত্তর:


169

ডিরেক্টরিতে পরিবর্তন করুন এবং ব্যবহার করুন:

find . -name ".DS_Store" -print0 | xargs -0 rm -rf
find . -name "._*" -print0 | xargs -0 rm -rf

পরীক্ষিত নয়, প্রথমে xargs ছাড়া তাদের চেষ্টা করুন!

আপনি ডিরেক্টরিটি প্রথমে ডিরেক্টরিতে পরিবর্তন না করে সন্ধানের পরে পিরিয়ডটি প্রতিস্থাপন করতে পারেন।

find /dir/here ...

2
আমি জানি তাঁর প্রশ্নটি এর জন্য জিজ্ঞাসা করেনি, তবে আমি কখনই মনে করতে পারি না: আপনার উদাহরণটি ফাঁকা জায়গায় ফাইলের নামগুলি পরিচালনা করে?
গ্রুন্ডলেফ্লেক

4
হ্যাঁ, প্রিন্ট 0 এবং -0 থেকে xargs এর জন্য এটি। সাধারণত এটি স্পেসগুলি সঠিকভাবে পরিচালনা করতে পারে না, তবে মুদ্রণ0 এর সাহায্যে এটি লাইনের শেষে একটি নাল অক্ষর দিয়ে ফাইলের নামটি মুদ্রণ করবে, যা -0 দিয়ে xarg এর পরে শ্বেতক্ষেত্রের সুযোগ না পেয়ে xargs এর পুরো পথটি অতিক্রম করবে আরএম কমান্ডে দ্বিতীয় বা তৃতীয় প্যারামিটার ব্যবহার করা হচ্ছে যা সত্যই খারাপ হতে পারে!
এক্স-ইশনেশন

7
@ এক্স: নতুন অনুসন্ধানকগুলি এমন ক্রিয়াকে সমর্থন -deleteকরে যা এটি সংক্ষিপ্ত করতে পারে। @ জেটি: এটি পুনরাবৃত্তির অধীনে অনুসন্ধান করে .। সেখানে কতগুলি ফাইল এবং উপ-ডিরেক্টরি রয়েছে তার উপর নির্ভর করে ... আপনি কেবল তাদের আপলোড হতে বাধা দিতে পারবেন না?
প্রকাশিত

1
-rআপনি কোনও ডিরেক্টরি মুছতে চান না সেজন্য (পুনরাবৃত্ত) পতাকাটি ব্যবহার করার পরামর্শ দেওয়া হচ্ছে না
ড্যানিয়েল জোহর

2
@ ইলমারি কারোনেন: ভালো কথা। এর command rmচেয়ে ভাল (যেটি আরও সরাসরি) সমাধান হতে পারে না ? ("ডাইরেক্ট" দ্বারা আমি বোঝাতে চাইছি এটি বিশেষত সমস্যা এবং অন্য কোনও কিছুর সাথেই কাজ করে এবং তাই কোনও অনাকাঙ্ক্ষিত পার্শ্ব-প্রতিক্রিয়া হওয়ার সম্ভাবনা কম থাকে এবং যে কেউ কোডটি বজায় রাখতে হয় তার কাছে আরও স্ব-ব্যাখ্যামূলক হতে চলেছে) পরে।)
আইকনোক্লাস্ট


86

আরও নতুন সন্ধানকারী সমর্থন করে -delete, তাই:

find . -name ".DS_Store" -delete

-printমুছে ফেলার একটি তালিকা পেতে যোগ করুন ।

আপনার কাছে একটি আপ-টু-ডেট পসিক্স সিস্টেম থাকলে কমান্ড আপনার পক্ষে কাজ করবে, আমি বিশ্বাস করি। কমপক্ষে এটি OS X 10.8 এ আমার জন্য কাজ করে এবং অন্যদের জন্য কাজ করে যারা ম্যাকোস 10.12 (মোজাভে) এ পরীক্ষা করেছেন।

@ এক্স-ইয়েশন-এর পোস্টে দেওয়া মন্তব্যে @ প্রেফিয়েন্টকে ক্রেডিট করুন (ভেবেছিলেন এটির নিজের উত্তরটি প্রমাণ করার পক্ষে যথেষ্ট সহায়ক)।


1
ওএসএক্স 10.6 এও ফিরে কাজ করে।
হোস

3
সবচেয়ে সহজ এবং সহজ সমাধান, +1!
19:20

6
@ ওয়ানওফোন: আমার মতামত হিসাবে, আমি এটি @ পূর্বসূরীর কাছ থেকে পেয়েছি। বশ করার সূচনা হিসাবে, আমি আপনার (সম্ভবত আরও সঠিক) সমাধানটি খুব কম পঠনযোগ্য এবং ব্যবহারযোগ্য found তারা কার্যত অভিন্ন হতে পারে তবে আমি দেখতে পাই যে এই বাক্য গঠনটি আরও স্পষ্টতা সরবরাহ করে।
রাত্রি

1
দ্য '.' প্রয়োজনীয় নয় কারণ findডিফল্টরূপে বর্তমান ওয়ার্কিং ডিরেক্টরিতে পুনরাবৃত্তি হয়।
টম রাসেল

প্রোগ্রামটির নতুন সংস্করণগুলিতে ডিরেক্টরিটি বাদ দেওয়া যেতে পারে এবং এটি বর্তমান কার্যকারী ডিরেক্টরি ( উইকিপিডিয়া ) বোঝায় । আপনার এখনও .ম্যাকোএস 10.12 (সিয়েরা) এ থাকা দরকার।
ডেম পিলাফিয়ান

18

সাধারণ আদেশ:

rm `find ./ -name '.DS_Store'` -rf
rm `find ./ -name '._'` -rf

শুভকামনা!


1
এটি দুর্দান্ত কাজ করে। কিন্তু সাবধানতা একটি শব্দ, আমি শুধু এই ব্যবহার rm -i খোঁজ ./ -name '* py'` -rf , which did NOT prompt me to delete files. you will need to take it on the end (i.e. -rfi`)। আমার ব্যাকআপ স্ক্রিপ্টের জন্য Thankশ্বরের ধন্যবাদ Thank
রায়ঞ্জিলন

1
যদি খুব বেশি ফাইল থাকে তবে -bash: /bin/rm: Argument list too long
ভিক্টর

12
cd /var/www/html && find . -name '.DS_Store' -print0 | xargs -0 rm
cd /var/www/html && find . -name '._*' -print0 | xargs -0 rm

2
আমি এটিকে আরও ভাল করে পছন্দ করেছি কারণ "rm" এর "-r" নেই যা এই নির্দিষ্ট কাজের জন্য প্রয়োজনীয় নয়।
lotoffreetime

6

আপনি বাশের পরিবর্তে zsh এ পরিবর্তন করতে পারেন। এটি আপনাকে ডিরেক্টরি বৃক্ষের যে কোনও জায়গায় ফাইলগুলি মেলানোর জন্য ** ব্যবহার করতে দেয়:

$ rm /var/www/html/**/_* /var/www/html/**/.DS_Store

আপনি এগুলিকে এগুলি একত্রিত করতে পারেন:

$ rm /var/www/html/**/(_*|.DS_Store)

জ্যাশ-এর ​​আরও অনেকগুলি বৈশিষ্ট্য রয়েছে যা বাশের অভাব রয়েছে, তবে এটি একাই স্যুইচ করার জন্য উপযুক্ত। এটি বেশিরভাগ (সম্ভবত সমস্ত) লিনাক্স ডিস্ট্রোসের পাশাপাশি সাইগউইন এবং ওএস এক্সে পাওয়া যায়

আপনি zsh সাইটে আরও তথ্য পেতে পারেন ।


1
একটি সম্ভাব্য সমস্যা: যেহেতু আপনি xargs ব্যবহার করবেন না, তাই আপনি কমান্ড-লাইন আর্গুমেন্ট দৈর্ঘ্যের সীমাবদ্ধতায় চলে যেতে পারেন। এছাড়াও, বাশ 4 **খুব সমর্থন করে :-) (যদিও এটি ডিফল্টরূপে নয়, shopt -s globstarসেট করা দরকার)
প্রকাশিত

4
find . -name "FILE-TO-FIND"-exec rm -rf {} \;

পাওয়া প্রতিটি ফাইলের জন্য এক্সিকিউট ব্যবহার করা দ্রুত নয়। এগুলি প্রিন্ট করে খুঁজে পাওয়া দ্রুত এবং তারপরে একবার rm শুরু করতে এক্সার্গস ব্যবহার করুন।
এক্স-ইশনেশন

3
তবে, আপনার যদি findএটি সমর্থন করে এমন একটি থাকে তবে তা +হ'ল এক্সার্গ্সের মতো: find . -name "FILE-TO-FIND" -exec rm -rf {} +- (এছাড়াও, আপনি এর আগেও কোনও জায়গা মিস করছেন -exec)
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

3
আমার দিনে আমাদের কখনই জার্গস ছিল না। এবং আমাদের স্কুলে যেতে হয়েছিল, উভয় পথে চড়াই .......
মার্টিন বেকেট

3

"Thumbs.db" পুনরাবৃত্তভাবে মোছার উদাহরণ;

find . -iname "Thumbs.db" -print0 | xargs -0 rm -rf

দ্বারা বৈধকরণ:

find . -iname "Thumbs.db"

এটি এখন, বর্তমান পথের অভ্যন্তরে "থাম্বস.ডিবি" দিয়ে কোনও এন্ট্রি প্রদর্শন করা উচিত নয়।


দয়া করে নিশ্চিত হয়ে নিন যে আপনার উত্তর কী মুছে যাচ্ছে তার একটি তালিকা মুদ্রণ করেছে এবং ব্যাখ্যা করুন যে কেউ কেন ব্যবহার করতে চান xargsএবং print0তার পরিবর্তে exec(কারণ রয়েছে)।
জোশ হাবদাস


2

আপনার যদি বাশ 4.0 ++ থাকে

#!/bin/bash
shopt -s globstar
for file in /var/www/html/**/.DS_Store /var/www/html/**/._ 
do
 echo rm "$file"
done

2
প্রতিটি ফাইলের জন্য আরএমের একটি নতুন অনুলিপি চালানো ব্যর্থ।
এক্স-ইশনেশন

2
@ এক্স-ইশনেশনের অকালীন অপটিমাইজেশন ব্যর্থ
লুসিনা

মৌলিকত্ব এবং আরও সাম্প্রতিক ব্যাশ উদ্ভাবনের ব্যবহারের জন্য উত্সাহিত।
জোশ হাবদাস

1

কয়েকটি বিষয় লক্ষণীয়:

'-ডিলিট' পুনরাবৃত্ত হয় না। সুতরাং .TemporaryItems (ফোল্ডার) এর মধ্যে ফাইল থাকলে কমান্ডটি ব্যর্থ হয়।

ম্যাকস: .ডিএসএসটোর ._। ডিএসএসটোোর। টেম্পোরারি আইটেমস .এপডিস্ক দ্বারা নির্মিত এই প্রচুর সমস্যাযুক্ত ফাইল রয়েছে

এই এক কমান্ডটি তাদের সকলকে সম্বোধন করে। একাধিক ম্যাচের জন্য বার বার অনুসন্ধান চালানো থেকে বাঁচায়।

find /home/foo \( -name '.DS_Store' -or -name '._.DS_Store' -or -name '._*' -or -name '.TemporaryItems' -or -name '.apdisk' \) -exec rm -rf {} \;

0

এটিও কাজ করে:

sudo rm -rf 2018-03-*

এখানে আপনার ফাইলগুলি মুছে ফেলা ফর্ম্যাটটির নামগুলি সহ 2018-03- (অন্য কিছু)

সহজবোধ্য রাখো


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