ডিরেক্টরিতে সমস্ত ফাইলকে সেই ডিরেক্টরিতে স্থানান্তরিত করতে স্নিপেট বাশ করুন


14

আমার এতে প্রচুর ফাইল এবং ডিরেক্টরি সহ একটি ডিরেক্টরি রয়েছে। এটি পরিষ্কার করার জন্য, আমি এই সমস্ত ফাইল একটি ডিরেক্টরিতে রেখে যাচ্ছি, সুতরাং আমি এই জাতীয় কিছু করতে যাচ্ছি:

$ ls | wc -l
123
$ mkdir new_directory
$ mv * ./new_directory

তবে এটি অবশ্যই কাজ করবে না কারণ এরপরে এটি new_directoryপ্রবেশ করার চেষ্টা করবে new_directory। সেই ডিরেক্টরিতে থাকা সমস্ত ফাইল এবং ডিরেক্টরিগুলি অনুলিপি করে আমাকে এক লাইনে যা করার তা করার কোনও সহজ উপায় আছে?


3
এটি কাজ করে, এটি কেবল একটি ত্রুটি বার্তা প্রিন্ট করে যে এটি নতুন_ ডিরেক্টরিকে নিজের মধ্যে স্থানান্তর করতে অক্ষম।
ক্যাস

উত্তর:


18

তোমার

এমভি *। / নতুন_ ডিরেক্টরি
কমান্ড আসলে কাজ করবে; এটি কেবল একটি সতর্কতা মুদ্রণ করবে যে এটি ডিরেক্টরিটি নিজের মধ্যে স্থানান্তর করতে পারে না।


এটির সাথে 'একমাত্র' সমস্যাটি হ'ল কমান্ডের মোট সম্প্রসারণ খুব দীর্ঘ হয়ে গেলে (অর্থাত্ অনেকগুলি ফাইল, খুব দীর্ঘ নাম) এটি আর কাজ করবে না।
নীল বাসজেস

পার্শ্ব নোট হিসাবে, আপনি যদি এটি দিয়ে যাচ্ছেন তবে আপনাকে git mvঅবশ্যই -kপতাকাটি ব্যবহার করতে হবে , যেহেতু গিটটি ডিফল্টরূপে ব্যর্থ হবে, কেবল কোনও সতর্কতা ছাড়াই নয়। সুতরাং আপনি করতে হবে git mv -k * ./new_dir
যুবল এ

11

একটি দ্রুত এবং নোংরা অনেলাইনার।

mv `ls -A | grep -v new_directory` ./new_directory

1
কাজ করবে না: একটি সরল এলএস ডটফাইল প্রদর্শন করবে না।
wzzrd

খুব ভাল পয়েন্ট। এটি একটি -a সঙ্গে স্থির করে।

2
সুতরাং নিজেকে নতুন করে ডিরেক্টরিতে (মূল প্রশ্ন) এমভি করার চেষ্টা করার পরিবর্তে আপনি এখন সরানোর চেষ্টা করছেন। এবং .. নতুন_ ডিরেক্টরিতে।
নীল বাসজেস

2
মতামত নীলস জন্য ধন্যবাদ। এটি একটি উপরের সাথে স্থির করে যা সরিয়ে দেয়। এবং .. ডিরেক্টরি তালিকা থেকে।

8

যদি আপনি কেবল ফাইলগুলি (যেমন ডিরেক্টরি নয়) সন্ধান করছেন, তবে

find . -type f -maxdepth 1 -exec mv {} ./new_directory/ \;

সবচেয়ে বহনযোগ্য সমাধান। গতির জন্য, আপনাকে প্রিন্ট 0 এবং -0 দিয়ে সন্ধান এবং এক্সার্গস সরিয়ে নেওয়া উচিত, তবে কেবল যদি আপনি জিএনইউ খুঁজে পান এবং এক্সগার্গস পেয়ে থাকেন।


3
মোটামুটি সাম্প্রতিক GNU অনুসন্ধান ব্যবহার করে আপনি you + এর পরিবর্তে use + ব্যবহার করতে পারেন; আমরা তৈরি করছি এমভি এর সংখ্যা হ্রাস করতে।
wzzrd

আপনি যদি জিএনইউ খুঁজে পেয়ে থাকেন তবে আপনাকে এক্সগার্গস ব্যবহার করতে হবে, যা একই কাজ করবে এবং আপনাকে একই সাথে একাধিক এমভি চালাতে দেবে -পি পতাকা সহ।
সিয়ান

এর দুর্দান্ত ব্যবহার find- যদিও আমি অবশ্যই এমন সিস্টেমে ছিলাম যেগুলির একটি নেই, দুঃখের সাথে :(
ওয়ারেন

সত্যি? SUS এ সুনির্দিষ্টভাবে (আফাইক) নির্দিষ্ট করা আছে, তাই সমস্ত কিছু থাকা উচিত। একমাত্র সমস্যা হ'ল এটি জিএনইউ অনুসন্ধান (যা প্রচুর দুর্দান্ত বিকল্প রয়েছে) বা নিয়মিত অনুসন্ধান।
সিয়ান

হাঁ, এটা হতে প্রদর্শিত হবে opengroup.org/onlinepubs/009695399/utilities/find.html
Cian

6

যে সময় আমি এই সমস্যায় পড়েছি, আমি নিম্নলিখিতগুলির একটি করেছি:

$ mkdir ../new-directory
$ mv * ../new-directory/
$ mv ../new-directory .

অথবা

$ mkdir .new-directory
$ mv * .new-directory/
$ mv .new-directory new-directory

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


আমি ওয়াইল্ড-কার্ড বাদ দেওয়া ডটেড ফাইলগুলি ভুলে গেছি; অনুস্মারক জন্য ধন্যবাদ! :)

2

কি সম্পর্কে:

cd ..
mv old_dir new_directory
mkdir old_dir
mv new_directory old_dir

IOW, বিষয়বস্তুগুলিকে একটি নতুন ডিরেক্টরিতে স্থানান্তর করবেন না, তবে এই ডিরেক্টরিটি একটি নতুন ডিরেক্টরিতে রাখুন।


1

@ রেমব্রেনের উত্তরের অনুরূপ ফ্যাশনে (যদিও ওয়ান-লাইনার নয়):

for FN in *
do
    if [ "<new_dir>" != $FN ] then
        mv $FN <new_dir>
done

এটি 100% বহনযোগ্য হওয়া উচিত - এমনকি findদুঃখজনকভাবে আপনার সিস্টেম থেকে অনুপস্থিত থাকলেও।


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

হতে পারে এটি কিছু হাইপার-প্যারানয়েড সায়াসডমিন ইয়েঙ্কিং ফাইন্ডুলস বা এর সমতুল্য? নিশ্চিত নয়, তবে আমি জানি যে আমি বক্সেনে চলে এসেছি যা এটি নেই :(
ওয়ারেন

1

আমার পরামর্শ: যেমনটি অন্যরা বলেছে

mv * ./new_directory

আইএফএফ খুঁজে পেতে কাজ করবে মোট সম্প্রসারণ যথেষ্ট সংক্ষিপ্ত।

অন্যান্য বুদ্ধিমান আপনি এটিকে চেষ্টা করতে পারেন যা অনেক বেশি সংখ্যক ফাইলের স্কেল করে:

find . -type f -maxdepth 1 | xargs -s100000 echo | xargs -iXXX mv XXX new_directory

ব্যাখ্যা

  1. সমস্ত ফাইল তালিকাবদ্ধ করুন।
  2. সমস্ত ফাইলের নাম সর্বাধিক 100000 অক্ষরে ভাগ করুন।
  3. প্রতি অংশে একটি একক এমভি কমান্ড তৈরি করুন।

আপনার ফাইলের নামগুলিতে কোনও স্পেস
পেলে

তুমি ঠিক বলছো. সুতরাং আমি অনুমান করি এটি ঠিক করার জন্য -প্রিন্ট 0 এবং -0 পতাকা সহ বৃদ্ধি করা উচিত।
নীল বাসজেস

আমি চেষ্টা করেছি -print0এবং -0এবং এটি এখনও বিরতি।
ক্রিশ্চিয়ান সিউপিতু

সন্ধান করুন: সতর্কতা: আপনি একটি অ-বিকল্প যুক্তি-টাইপের পরে -maxdepth বিকল্পটি নির্দিষ্ট করেছেন, তবে বিকল্পগুলি অবস্থানগত নয় (-ম্যাক্সডেপথ এটির আগে নির্দিষ্ট করা পরীক্ষাগুলি এবং তার পরে নির্দিষ্ট করাগুলিকে প্রভাবিত করে)। অন্যান্য তর্ক করার আগে দয়া করে বিকল্পগুলি নির্দিষ্ট করুন।
ক্রিশ্চিয়ান সিউপিতু


-1

ত্রুটি বার্তা এড়াতে এবং এটিকে সহজ রাখতে:

mv *.* ./new_Folder

একই জিনিসটি করবে তবে ত্রুটি বার্তাটি এড়ানো হবে (যতক্ষণ না আমার ধারনা ফোল্ডারের নামগুলিতে আপনার বিন্দু না থাকে)।

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