আমি কীভাবে নেস্টেড সাব-ডাইরেক্টরিগুলি থেকে ফাইলগুলিকে উবুন্টুর অন্য ফোল্ডারে স্থানান্তর করব? (অনেক সাবফোল্ডার কেড়ে নেওয়ার চেষ্টা করা হচ্ছে)


36

আমি কীভাবে ফাইলগুলি এবং ডিরেক্টরিগুলি অন্য ফোল্ডারে / প্যারেন্ট ফোল্ডারে স্থানান্তর করব না?

আমার একটি ফোল্ডার কাঠামো রয়েছে যা অত্যন্ত কুৎসিত, কিছু এমপি 3 ফাইল একটি সাব-ফোল্ডারে 6 স্তর গভীর সমাহিত করেছে।

আমি উবুন্টু ব্যবহার করে কোনও সাব-ডাইরেক্টরি ছাড়াই একটি ডিরেক্টরিতে সমস্ত ফাইল (বেশিরভাগ এমপি 3 তবে সমস্ত নয়) শেষ করতে চাই।

সহায়তার প্রয়োজন?

উত্তর:


48

আসকবুন্টু-কিউএতে দুর্দান্ত উত্তর রয়েছে

এটি করতে, একটি টার্মিনাল খুলুন এবং এই আদেশটি কার্যকর করুন:

mv  -v ~/Downloads/* ~/Videos/

এটি ডাউনলোডগুলি ফোল্ডার থেকে সমস্ত ফাইল এবং ফোল্ডারগুলিকে ভিডিও ফোল্ডারে সরানো হবে।


সমস্ত ফাইল সরানো, তবে ফোল্ডারগুলি না:

তবে, আপনি যদি ডাউনলোড ফাইল থেকে সমস্ত ফোল্ডার (তবে ফোল্ডার নয়) ভিডিও ফোল্ডারে স্থানান্তর করতে আগ্রহী হন তবে এই আদেশটি ব্যবহার করুন

find ~/Downloads/ -type f -print0 | xargs -0 mv -t ~/Videos

ডাউনলোড ফোল্ডারগুলি থেকে কেবল ফাইলগুলি সরানো, তবে সাব-ফোল্ডার থেকে নয়:

আপনি যদি ডাউনলোডগুলি ফোল্ডার থেকে সমস্ত ফাইল সরিয়ে নিতে চান তবে ডাউনলোড ফোল্ডারে ফোল্ডারের মধ্যে কোনও ফাইল নয়, এই কমান্ডটি ব্যবহার করুন:

find ~/Downloads/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Videos

এখানে -maxdepthবিকল্পটি সন্ধান করে যে গভীর অনুসন্ধানের চেষ্টা করা উচিত, তার 1অর্থ, কেবলমাত্র অনুসন্ধান কমান্ডে নির্দিষ্ট ডিরেক্টরি। ব্যবহার করে আপনি চেষ্টা করে দেখতে পারেন 2, 3এছাড়াও পরীক্ষা।

বিস্তারিত ব্যাখ্যার জন্য উবুন্টু ম্যানপেজটি দেখুন page

সূত্র


আমি যা করতে চাইলে ফোল্ডারে সমস্ত ফাইল অনুলিপি করাতে কি আমাকে কেবল এমপি সিপিতে পরিবর্তন করতে হবে? আমি লিনাক্সে নতুন
নিউওরিডার

13

সমাধান

find /src/dir -type f -exec mv --backup=numbered -t /dst/dir {} +

কমান্ডটি সমস্ত নিয়মিত ফাইল /src/dir(সমস্ত উপ-ডিরেক্টরি অন্তর্ভুক্ত) সন্ধান করবে এবং /dst/dirকমান্ডের সাহায্যে এগুলিকে সরিয়ে ফেলবে mv। আপনার নিজের দ্বারা ডিরেক্টরিগুলি প্রতিস্থাপন করুন। একই নামের ফাইলগুলির নাম স্বয়ংক্রিয়ভাবে নামকরণ করা হবে।

সরানোর জন্য ফাইল নির্বাচন করা হচ্ছে

আপনি যদি কেবল এমপি 3 ফাইল সরাতে চান -iname "*.mp3"তবে findকমান্ডের পরে বিকল্পটি যুক্ত করুন -type f

C0dev দ্বারা উত্তরের তুলনা

C0dev এর উত্তরের কেবল দ্বিতীয় কমান্ডই প্রশ্নের উত্তর দেয়। নীচে এটি এই উত্তরটির সাথে কীভাবে তুলনা করে। 3. এবং 4 পয়েন্টগুলি অন্য উত্তরে এখানে ঠিক একইভাবে সমাধান করা যেতে পারে।

  1. mvসমাধান ব্যতীত -exec +অতিরিক্ত কমান্ড কল করার প্রয়োজন নেই xargsবা parallelদুটিবার ফাইলের নাম হস্তান্তর করা দরকার।
  2. অন্য উত্তরটি একই নামী ফাইলগুলিকে নিঃশব্দে ওভাররাইট করবে। এখানে ফাইলগুলি স্বয়ংক্রিয়ভাবে বিকল্পটির পরিবর্তে নামকরণ করা হবে --backup=numbered। দুর্ভাগ্যক্রমে প্রত্যয়যুক্ত এই ব্যাকআপগুলি ~3~ডিফল্টরূপে পরিচালিত বেশিরভাগ ফাইলের মধ্যে লুকানো থাকবে। দুর্ভাগ্যক্রমে mvপ্রত্যয়টি পরিবর্তনের অনুমতি দেয় না তবে এটি অতিরিক্ত আদেশ দ্বারা সহজেই পোস্ট-প্রক্রিয়া করা যেতে পারে। এটি একটি জিএনইউ এক্সটেনশন।
  3. এর বিপরীতে -print0 -exec command {} +আইইইই স্ট্যান্ড 1003.1 (পসিক্স), আইএসও / আইসিসি 9945 এবং একক ইউনিক্স স্পেসিফিকেশন মানগুলির একটি অংশ। সুতরাং এটি আরও বহনযোগ্য হতে হবে। দেখুন আইইইই এসটিডি 1003,1, 2004 সংস্করণ , আইইইই এসটিডি 1003,1, 2013 সংস্করণ এবং 0000243: "খুঁজে বার করতে" -print0 যোগ করুন । তবে যাইহোক, প্রয়োজনীয় -tস্যুইচ mvএকটি জিএনইউ এক্সটেনশন তাই পুরো কমান্ডটি পসিক্স সিস্টেমের মধ্যে পোর্টেবল হয় না।

নোট: যদি findদিয়ে শুরু পাথ উত্পাদন করতে সক্ষম হবে -(আমি কোন ধরনের প্রয়োগের জানি না find। মুহূর্তে) {}শেষ অফ অপশন সূচকটি পূর্বে করা উচিত: --


ত্রুটি: সন্ধান করুন: ex -exec '
ক্রিস

@ ক্রিস: আপনি ঠিক বলেছেন, মনে হয় এটি {}অবশ্যই শেষ যুক্তি হিসাবে হবে। সংশোধন।
পাবউক

@ ক্রিস: আপনার ইচ্ছার পরে কি এখন এটি কাজ করে? যদি হ্যাঁ, আপনি সম্ভবত উত্তরটি গ্রহণ করতে পারেন তাই আপনার প্রশ্নটি "সমাধান না হওয়া" হিসাবে প্রদর্শিত হবে না।
pabouk

এটি আমি চালিয়ে যাচ্ছি এবং ডিরেক্টরিটি পাওয়া যায়নি ত্রুটিগুলি পেয়েছি:
ক্রিস

আমি যা চালাচ্ছি: ক্লাস্টাল @ ক্লিপ: s s এলএস 1 ম স্ক্রিপ্ট।আর ফায়ারফক্স_ওয়াল্প্পার্পার.পিং অংশ 1vidproj জোটেরো পিডিএফ ম্যানেজার ডেস্কটপ মোজিলা.পিডিএফ পিকচারস দস্তাবেজগুলি প্যারেন্ট ভিডিও ক্লাস্টাল @ ক্লিপ: source source সন্ধান / উত্স / ডিরেক্টরি-টাইপ এফ-এক্সেক এমভি -t / গন্তব্য / ডিরেক্টরি {} + সন্ধান করুন: source / উত্স / ডিরেক্টরি ': এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই
ক্রিস

2

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

সমস্যা

কমান্ড শুরুর পরে নিম্নলিখিত বার্তার বিভিন্নতা দেওয়া হয়েছিল। কমান্ডটি একাধিক ফাইল তৈরি করে।

mv: `/data/share/docs/src/dir/filename.ext' and `/data/share/docs/src/dst/filename.ext' are the same file

কারণ

/srcএকটি পিতা বা মাতা হয় /dst(যেমন /src/../dst/)।

সমাধান

আরও ভাল সমাধান হতে পারে, আমি কেবল ফাইলগুলি আমার বাইরে একটি অস্থায়ী ডিরেক্টরিতে স্থানান্তরিত করেছিলাম /srcএবং তারপরে কমান্ডটি পুনরায় সেই /src/../dstডিরেক্টরিতে রেখে দিয়েছিলাম যাতে আমি তাদের শেষ করতে চেয়েছিলাম।


2

আমার ওয়ান-লাইনার - এটি ম্যাকগুলিতে কাজ করে তবে কোনও * নিক্সেও করা উচিত। মূল ডিরেক্টরি থেকে শুরু করুন।

# Move files to parent and delete empty folders
find . -not -type d -print0 | xargs -0J % mv -f % . ; find . -type d -depth -print0 | xargs -0 rm -rf

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


(1) দয়া করে আপনার উত্তরটি কী করে তা ব্যাখ্যা করুন এবং অন্যান্য উত্তরের তুলনায় এটির যে কোনও সুবিধা রয়েছে (যা খুব মিল রয়েছে)। মন্তব্যে প্রতিক্রিয়া জানাতে দয়া করে;  আপনার উত্তরটি আরও পরিষ্কার এবং আরও পরিপূর্ণ করতে সম্পাদনা করুন। (২) নোট করুন যে -notঅপারেটরটি মানহীন, তাই আপনার আদেশটি অন্যের তুলনায় কম পোর্টেবল।
স্কট 10

খুঁজে। -না-টাইপ ডি-প্রিন্ট0 | xargs -0J% এমভি -ফ%। ; খুঁজে। -প্রকার ডি -ডেপথ -প্রিন্ট 0 | xargs -0 rm -rf আমি একটি ফোল্ডারে এই কমান্ডটি চালিয়েছি এবং এটি সাব ফোল্ডারগুলি মুছে ফেলেছে, আমি যে ফোল্ডারটি ছিলাম, এবং তারপরে প্যারেন্ট ফোল্ডারে চলে এসেছি। ভাগ্যক্রমে আমি আমার ফাইল ম্যানেজারটি দেখছিলাম এবং কমান্ডটি থামাতে সক্ষম হয়েছিল এবং এটি একটি পরীক্ষার ফোল্ডারে চালিত হয়েছিল।
উইল

1

টার্মিনাল খুলুন, ফাইলগুলি সহ আপনার ফোল্ডারের ফোল্ডারে সিডি করুন এবং find . -mindepth 2 -type f -print -exec mv {} . \; এই সাব-ডিরেক্টরি থেকে সমস্ত ফাইলকে বর্তমানের মধ্যে সরিয়ে নিতে রান করুন ।

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