সাবফোল্ডারে সমস্ত ফাইল (লুকানো সহ) কীভাবে পুনরাবৃত্তভাবে সরানো যায় * * নিক্সের প্যারেন্ট ফোল্ডারে?


14

এটি কিছুটা বিব্রতকর প্রশ্ন, তবে আমাকে স্বীকার করতে হবে যে আমার কেরিয়ারের এই দেরিতে আমার এখনও এমভি কমান্ড সম্পর্কে প্রশ্ন রয়েছে।

আমার প্রায়শই এই সমস্যা হয়: আমার সমস্ত ফাইলকে পুনরাবৃত্তভাবে এক স্তর উপরে নিয়ে যেতে হবে। ধরা যাক আমার কাছে ফোল্ডার ফু আছে এবং এর ভিতরে একটি ফোল্ডার বার রয়েছে। বারে ডট ফাইল এবং ফোল্ডার সহ ফাইল এবং ফোল্ডারগুলির একটি জগাখিচুড়ি রয়েছে। আমি কীভাবে বারে সমস্ত কিছুকে Foo স্তরে নিয়ে যেতে পারি?

যদি ফু ফাঁকা থাকে, আমি বারের উপরে কেবল এক স্তর উপরে সরে যাই, ফু মুছি এবং বারটির নাম বদলে রাখি। সমস্যার অংশটি হ'ল "ডটস সহ সমস্ত কিছুর জন্য" এমভি'র ওয়াইল্ডকার্ড কী তা আমি বুঝতে পারি না। এই প্রশ্নের একটি অংশটি হ'ল - এখানে কি ওয়াইল্ডকার্ডগুলির গভীরতর আলোচনা রয়েছে যা সিপি এবং এমভি কমান্ডগুলি কোথাও ব্যবহার করে (গুগলিং এটি কেবল খুব বেসিক টিউটোরিয়াল নিয়ে আসে)।

উত্তর:


19

বাশে (এবং আরও কিছু) আপনি একটি লাইনে এটি সম্পাদন করতে ব্রেস সম্প্রসারণ ব্যবহার করতে পারেন:

mv bar/{,.}* .

কমাটি একটি নাল এবং একটি বিন্দু পৃথক করে, তাই mvকমান্ডটি ফাইলের সাথে মেলে যা দেখতে মেলে *এবং sees.*


এটি '..' সরানোর চেষ্টা করেও, 'রিসোর্স ব্যস্ত' বার্তাটি ব্যর্থ করে। তবুও কাজ করে।
Xananax

3
নামবিহীন ব্যবহারকারী দ্বারা প্রস্তাবিত:To eliminate the error caused by also matching "." and "..", use this command: mv bar/{,.[!.],..?}* .
আশাহীন N00b

2

এটি করার সবচেয়ে সহজ উপায় এটি দুটি কমান্ডে করা, কারণ * মেলে না w যাই হোক না কেন

cd /foo
mv bar/* ./
mv bar/.??* ./

আপনি বার /.* ব্যবহার করতে চান না যা আমি এই ভুলটি করার সময় খুঁজে পেয়েছি:

rm -rf ./.* 

এই একটি খারাপ জিনিস. কেউ অনুমান করতে চান কেন? ;-)


আমি মনে করি না বাশ বা জেডএস প্রসারিত .*হয় .এবং ..। Zsh আমার জন্য কমপক্ষে না।
মিকায়েল এস

মিকায়েল: আমি প্রতিশ্রুতি দিতে পারি যে বাশ দেয় (বা কমপক্ষে এটি করেছিল), যেহেতু আমাকে ব্যবহারকারীর ডিরেক্টরিগুলি পুনরুদ্ধার করতে হয়েছিল যা আমি কেবল তা করেই শেষ করে দিয়েছিলাম
ম্যাট সিমন্স

2

গ্লোব্বিং সম্পর্কে জানতে প্রথমে - এটি শেল দ্বারা করা হয়েছে, আদেশ নয়। সমস্ত বিবরণের জন্য আপনার শেলের ম্যান পৃষ্ঠাটি দেখুন।


2

এটি সাবফোল্ডার থেকে সমস্ত ফাইল সংগ্রহ করে এবং তাদের বর্তমান ডিয়ারে নিয়ে যায়

find . -type f -exec mv -iv \{} . \;

আপনি যদি একই নামে ফাইলগুলি চালিত করতে চান তবে ব্যবহার করুন

yes y | find . -type f -exec mv -iv \{} . \;

1

mv .??* *একক চরিত্রের পরে বিন্দু ছাড়া অন্য কোনও কিছুর যত্ন নেবে। যদি এটি আপনার পরিস্থিতির পক্ষে সাধারণ হয় তবে আপনি যুক্ত করতে পারেন .[a-zA-Z0-9]*। সেই ইচ্ছে এখনও রয়েছে যেমন নামের সাথে ফাইল ছাড়বে .;, .^আর .^I(ট্যাব)। আপনার যদি সমস্ত কিছু পরিচালনা করতে হয় তবে আপনার কিছুটা জটিল হতে হবে।

mv .. `ls -f | egrep -v '^.$|^..$'

0

যদি আপনার একটি ডিরেক্টরি কাঠামো থাকে /foo/bar/এবং আপনি সমস্ত ফাইলকে barউপরে এক ধাপে সরিয়ে নিতে চান , barডিরেক্টরিতে যান এবং নিম্নলিখিতটি টাইপ করুন:

find . -depth -print0 | cpio --null -pvd ../

সাধারণত, আমি মনে করি cpio(1)যে এই ধরণের কাজের জন্য ভাল। আপনি info cpioআপনার শেলটি জারি করে বিস্তারিত ডকুমেন্টেশন চেক করতে পারেন ।

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