আমার অ্যাপ্লিকেশন ডিরেক্টরিগুলি থেকে সমস্ত .svn ডিরেক্টরিগুলি কীভাবে সরিয়ে ফেলা যায়


192

আমার অ্যাপ্লিকেশনটিতে রফতানি সরঞ্জামগুলির একটি মিশন .svnআমার অ্যাপ্লিকেশন ডিরেক্টরি ট্রি থেকে সমস্ত ডিরেক্টরি পরিষ্কার করা । আমি লিনাক্স শেলের একটি পুনরাবৃত্ত কমান্ড সন্ধান করছি যা পুরো গাছটিকে অতিক্রম করবে এবং .svnফাইলগুলি মুছে ফেলবে ।

আমি রফতানি ব্যবহার করছি না, কারণ এই স্ক্রিপ্টটি অন্য কোনও ফাইল / ডিরেক্টরি নামের জন্য ব্যবহৃত হবে যা এসভিএন সম্পর্কিত নয়। আমি এরকম কিছু চেষ্টা করেছি:

find . -name .svn | rm -fr

এটি কাজ করে না ...


3
আপনি যদি 'xargs rm -rf' ব্যবহার করেন তবে আপনার কমান্ডটি কাজ করা উচিত
পিটার ভ্যান ডের হেইজডেন

1
আপনি ডিরেক্টরিগুলি মুছতে চান তা নিশ্চিত করার জন্য আপনি "rm -rfi" মুছে ফেলুন কমান্ডটি সংশোধন করতে পারেন।
শয়নকাল

যদিও xargs ব্যবহার করবেন না .. আপনার ডিরেক্টরিতে স্পেস রয়েছে এমন ডিরেক্টরিগুলির সাথে সমস্যা হবে below নীচের বর্ণিত হিসাবে সন্ধান করুন।
জন হান্ট

উত্তর:


438

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

find . -name .svn -exec rm -rf '{}' \;

এরকম একটি কমান্ড চালানোর আগে, আমি প্রায়শই এটি প্রথমে চালাতে পছন্দ করি:

find . -name .svn -exec ls '{}' \;

43
ডিরেক্টরিতে স্থান বা এই জাতীয় অক্ষর থাকতে পারে আপনাকে একক উদ্ধৃতিতে {put লাগাতে হতে পারে: find . -name .svn -exec rm -rf '{}' \;
এমটোলো

38
এই পরীক্ষাটি আমার find . -name .svn -exec echo {} \;
বাশে

6
প্রতিধ্বনি / এলএস চালানো প্রথমে এই উত্তরের 'প্রো' স্পর্শ। যে কোনও বোকা একটি সিস্টেমকে ধ্বংস করতে পারে।
জন হান্ট

6
কি করে {} \;?
জন মিটেন

3
সহ দ্বিতীয় কমান্ড চালিয়ে lsআমি entries prop-base props text-base tmpআউটপুট পাই ...
রসুল

51

আপনি যা লিখেছেন তা নিউলাইন দ্বারা পৃথক করা ফাইলের নামের (এবং পাথ) এর তালিকা পাঠায় rm, কিন্তু আরএম জানেন না that ইনপুটটি কী করবে। এটি কেবল কমান্ড লাইন প্যারামিটারের প্রত্যাশা করে।

xargs ইনপুট নেয়, সাধারণত নিউলাইন দ্বারা পৃথক করে এবং কমান্ড লাইনে রাখে, তাই xargs যুক্ত করা আপনার কাজটি করে:

find . -name .svn | xargs rm -fr

xargsএটি যথেষ্ট বুদ্ধিমান যে এটি কেবল যতটা আর্গুমেন্ট rmগ্রহণ করতে পারে তেমন পাস করবে । সুতরাং, আপনার যদি মিলিয়ন ফাইল থাকে তবে এটি rm1,000,000 / 65,000 বার চলতে পারে (যদি আপনার শেলটি কমান্ড লাইনে 65,002 টি আর্গুমেন্ট গ্রহণ করতে পারে-65k ফাইল + 1 -fr} এর জন্য rm + 1 এর জন্য)।

ব্যক্তিরা যেমন দক্ষতার সাথে উল্লেখ করেছেন, নিম্নলিখিতগুলিও কাজ করে:

find . -name .svn -exec rm -rf {} \;
find . -depth -name .svn -exec rm -fr {} \;
find . -type d -name .svn -print0|xargs -0 rm -rf

প্রথম দুটি -execফর্ম উভয়ই rmপ্রতিটি ফোল্ডার মোছার জন্য কল করে , সুতরাং আপনার যদি 1,000,000 ফোল্ডার থাকে rmতবে 1,000,000 বার আহ্বান করা হবে। এটি অবশ্যই আদর্শের চেয়ে কম। এর আরও নতুন বাস্তবায়ন rmআপনাকে কমান্ডটি এমন একটি +ইঙ্গিত দিয়ে শেষ করতে দেয় যা rmযথাসম্ভব আর্গুমেন্ট গ্রহণ করবে:

find . -name .svn -exec rm -rf {} +

সর্বশেষ সন্ধান / xargs সংস্করণটি মুদ্রণ0 ব্যবহার করে, যা আউটপুট তৈরি করে যা নিউলাইনের \0পরিবর্তে টার্মিনেটর হিসাবে ব্যবহার করে find যেহেতু পসিএক্স সিস্টেমগুলি কোনও অক্ষরকে \0ফাইল ফাইলের অনুমতি দেয় তবে আর্গুমেন্টগুলি সঠিকভাবে পাস হয়েছে rmবা অ্যাপ্লিকেশনটি কার্যকর হয়েছে তা নিশ্চিত করার পক্ষে এটি নিরাপদতম উপায় ।

উপরন্তু, একটি এর -execdirযে চালানো হবে rmডিরেক্টরির যা ফাইল, পাওয়া যায়নি বরং বেস ডিরেক্টরি চেয়ে থেকে এবং একটি -depthযে গভীরতা প্রথম শুরু হবে।


31

পাইপ, জার্গার্স, এক্সিকিউট, বা কোনও কিছুর প্রয়োজন নেই:

find . -name .svn -delete

সম্পাদনা করুন: মজা করছি, স্পষ্টতই হুডের নীচে -deleteকল unlinkat()করে, সুতরাং এটি এর মতো আচরণ করে unlinkবা ফাইলযুক্ত rmdirডিরেক্টরিতে কাজ করতে অস্বীকার করবে।


54
একটি সমস্যা, -deleteকোনও ডিরেক্টরিতে এটি ফাইল থাকলে স্পর্শ করবে না।
জিওনক্রস

2
ভবিষ্যদ্বাণীটির -forceজন্য কোনও বা পুনরাবৃত্ত পতাকা নেই -delete, সুতরাং এই উত্তরটি অকেজো। সুতরাং, এটি ফিরে এসেছে |xargs rm -rf, যা -execএর কুশলী স্থানধারক এবং অর্ধিকোলন দিয়ে টাইপ করা কম কুশ্রী -exec rm -rf '{}' \;
টমাসজ গ্যান্ডার

13

.Svn ডিরেক্টরিটি মুছে ফেলার জন্য ইতিমধ্যে অনেক উত্তর সরবরাহ করা হয়েছে। তবে আমি যুক্ত করতে চাই, আপনি যদি চেকআউটের পরিবর্তে রফতানি করেন তবে আপনি শুরু থেকেই এই ডিরেক্টরিগুলি এড়াতে পারবেন:

svn export <url>

+1, এটি ইতিমধ্যে এসএনএন-তে অন্তর্নির্মিত হলে এটি পুনরায় করার দরকার নেই।
পাওয়ারলর্ড

1
আপনি যদি রফতানীতে রূপান্তরিত ফাইলগুলি ধরে রাখতে চান তবে কেবলমাত্র এই পদ্ধতির সাথে আমি দেখি। এসএনএন ডক্স থেকে, "সমস্ত স্থানীয় পরিবর্তন সংরক্ষণ করা হবে, তবে সংস্করণ নিয়ন্ত্রণে থাকা ফাইলগুলি অনুলিপি করা হবে না।"
10:51

@ ফ্রেডফাইভ: সাধারণত আমি সংস্করণ-নিয়ন্ত্রণের অধীনে সমস্ত প্রাসঙ্গিক ফাইল রাখতে পছন্দ করি, এমনকি লাইব্রেরিও ব্যবহার করি, যাতে প্রকল্পটি বাক্সের বাইরে চলে যায়। এই সেটআপে রূপান্তরিত ফাইলগুলি বাইনারিগুলি সংকলন করা হয়, যা বিল্ডফিলের একটি লক্ষ্য দ্বারা পুনরায় তৈরি করা হয়। তবে আপনি ঠিক বলেছেন, যদি আপনার প্রকল্পটি সংস্করণ নিয়ন্ত্রণে নেই এমন ফাইলগুলির উপর নির্ভর করে তবে একটি রফতানি কাজ করবে না।
Mnementh

তবে ... আমার আরও সাধারণ উত্তর দরকার ছিল। .Svnটি সর্বাধিক সাধারণ উদাহরণ ছিল, আমি প্রশ্নটিতে উল্লেখ করেছি।
Itay Moav -Malimovka

12

আপনি যদি অনেক কিছু দেখতে পছন্দ করেন না

find: `./.svn': No such file or directory

সতর্কতা, তারপরে -depthস্যুইচটি ব্যবহার করুন :

find . -depth -name .svn -exec rm -fr {} \;

10

উইন্ডোজে, আপনি আপনার ডান ক্লিকের প্রসঙ্গ মেনুতে "এসভিএন ফোল্ডারগুলি মুছুন" যুক্ত করতে নিম্নলিখিত রেজিস্ট্রি স্ক্রিপ্টটি ব্যবহার করতে পারেন। এই সমস্যাযুক্ত ফাইল ধারণকারী যে কোনও ডিরেক্টরিতে এটি চালান।

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]
@="Delete SVN Folders"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]
@="cmd.exe /c \"TITLE Removing SVN Folders in %1 && COLOR 9A && FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" \""

নিখুঁত কৌশল. ওপির জন্য সহায়ক নয়, তবে +1 কারণ আমি মুগ্ধ হয়েছিল!
rrhartjr

এটা সত্যিই দারুন. ধন্যবাদ। আমি জানি এটি অত্যন্ত পুরানো, তবে যাই হোক না কেন। আমি যাইহোক এটি ভালবাসি।
অ্যান্টনি

9

আপনি প্রায় এটি ছিল। আপনি যদি কোনও কমান্ডের আউটপুটটিকে অন্য একটিকে প্যারামিটার হিসাবে পাস করতে চান তবে আপনাকে xargs ব্যবহার করতে হবে। যুক্ত করা -print0নিশ্চিত করে যে স্ক্রিপ্টটি সাদা জায়গার সাথে পাথ পরিচালনা করতে পারে:

find . -type d -name .svn -print0|xargs -0 rm -rf

2
কিছু রজনের জন্য যা কাজ করে তা খুঁজে পাওয়া যায়। -নম .svn | xargs rm -rf আপনার সংস্করণ আমাকে যদিও দিকনির্দেশনা দিয়েছে, ধন্যবাদ
Itay Moav -Malimovka


4

একটি গুরুত্বপূর্ণ বিষয় হিসাবে, যখন আপনি ব্যবহার করতে চান শেল .svn ফোল্ডার মুছে ফেলতে আপনি প্রয়োজন -depth find কমান্ডের যেমন মত যে ডিরেক্টরিকে শুধু মোছা হয়েছে ত্রুটি বার্তা লিখে এবং দেখাচ্ছে প্রতিরোধ যুক্তি

"find: ./.svn: No such file or directory"

ফলস্বরূপ, আপনি নীচের মতো কমান্ড সন্ধান করতে পারেন:

cd [dir_to_delete_svn_folders]
find . -depth -name .svn -exec rm -fr {} \;

এটিই আমি খুঁজছিলাম এবং সঠিক উত্তর হওয়া উচিত।
ভাগ্যটাইক্সি


2

বিকল্পভাবে, যদি আপনি কাজের অনুলিপিটি পরিবর্তন না করে একটি অনুলিপি রফতানি করতে চান তবে আপনি আরএসসিএনসি ব্যবহার করতে পারেন:

rsync -a --exclude .svn path/to/working/copy path/to/export

1
অথবা এসএনএন এক্সপোর্ট / পাথ / টু / রিপোজিটরি ব্যবহার করুন, যা মূলত একই জিনিসটি করে।
কালেব পেডারসন

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