বর্তমান ফোল্ডারের সমস্ত ফাইল কীভাবে সাবফোল্ডারে স্থানান্তরিত করবেন?


69

আমি পথে:

/myuser/downloads/

এবং আমি একটি সাব ফোল্ডার তৈরি করেছি:

/myuser/downloads/new

এখন আমি ডাউনলোড ফোল্ডারের সমস্ত ফাইল এবং ফোল্ডার / সাব-ফোল্ডারগুলিকে সাব-ফোল্ডারে স্থানান্তরিত করতে চাই।

কিভাবে আমি এটি করতে পারব?

আমি চেষ্টা করেছিলাম:

mv -R *.* new/

তবে সরানো -আর স্যুইচ লাগে না বলে মনে হচ্ছে।


4
তোমার দরকার নেই -আর। ঠিক mv * newযদিও, এটি "নতুনকে নতুনতে স্থানান্তরিত করতে পারে না" বা অনুরূপ কিছু দেখায়। mv -i * newওভাররাইটগুলি রোধ করতে আপনার পক্ষে সম্ভবত ।

উত্তর:


100

আদেশ

mv !(new) new

কৌতুক করা উচিত। যদি এটি কাজ না করে তবে shopt -s extglobপ্রথমে চালান ।

লুকানো ফাইল / ডিরেক্টরিগুলি (যে বিন্দু দিয়ে শুরু হয়) সরানোর জন্যও shopt -s dotglobপ্রথমে চালান ।
সুতরাং, সংক্ষেপে:

shopt -s extglob dotglob
mv !(new) new
shopt -u dotglob

( dotglobখারাপ বিস্ময় এড়াতে আনসেট করা সবসময় ভাল )।


5
আপনি কি তাৎপর্য বলতে পারবেন !(something)?
অ্যাডারলিক

2
@ উদার যা কেবল কিছু বলছে না (কিছু)) অন্য কথায়, সবকিছু অনুলিপি করুন তবে কিছু নয়। কাদা হিসাবে পরিষ্কার?
রকিমাউন্টেনহু

4
খুব। আপনি zsh এর সমতুল্য জানতে হবে?
অ্যাডিয়ারলক

1
আমি এটি পাই না, উদাহরণস্বরূপ কি যদি আমি ফোল্ডারের সামগ্রীটি devআমার বর্তমান অবস্থানে নিয়ে যাওয়ার চেষ্টা করি , আমাকে কি কার্যকর করতে হবে mv !(dev) dev?? আমি পেয়েছি-bash: !: event not found
কালো

5
@ আড্ডার খুব অনুরূপ। setopt extendedglobzsh এ বর্ধিত গ্লোব মোড সেট করতে। ^বর্জন প্রতীক, তাই mv ^new newকৌশলটি করতে হবে। তারপরে zsh এ সেট করা সমস্ত অপশন দেখতে আপনি ব্যবহার করতে পারেন setoptএবং এক্সটেন্ডেড গ্লোব মোডটি অক্ষম করতে পারবেনunsetopt extendedglob
মিঃ টি

10

আমি এর মতো কিছু পেয়েছি তবে এটি বুঝতে কিছুটা সহজ, এবং এটি আপনার পক্ষেও বেশ কার্যকর হতে পারে:

ls | grep -v new | xargs mv -t new

উপরের সমাধানটিতে একটি ব্যাখ্যা যুক্ত করা:

ম্যান পেজ থেকে:

  • mv -t

    -t, --target-directory=DIRECTORY
          move all SOURCE arguments into DIRECTORY
    
  • grep -v

    -v, --invert-match
          Invert the sense of matching, to select non-matching lines.
    

ধাপে ব্যাখ্যা:

  • ls বর্তমান ডিরেক্টরিতে ফাইলগুলি তালিকাভুক্ত করবে
  • grep -v new পাইপের সাথে ফিরে আসবে নতুনের সাথে মেলে না
  • xargs mv -t newএতে পাইপযুক্ত ফাইলগুলি grep -vলক্ষ্য ডিরেক্টরিতে স্থানান্তরিত করবে

আমি এই পদ্ধতি চেষ্টা করেছিলেন কিন্তু আমি হচ্ছি: mv: illegal option -- t। এটি কি কারণ আমি ব্যবহার করছি zsh?
কনস্ট্যান্টফুন

@ কনস্ট্যান্টফুন এটি জেডএস হতে পারে তবে আমি অনুমান করব এটি আপনার বাস্তবায়ন mv, (অর্থাত আপনার এমভির সংস্করণটি আমি যেটা ব্যবহার করছিলাম সেগুলির চেয়ে তাদের চেয়ে আলাদা) আপনি কোনটি ওএস ব্যবহার করছেন? আমি বিশ্বাস করি যখন আমি এই উত্তরটি লিখেছিলাম তখন আমি লিনাক্স ডিস্ট্রো centosব্যবহার করে ছিলাম bash
লকউব্রব

2
এটি কেবলমাত্র ওএসএক্সে পরীক্ষা করে আমি একই ত্রুটিটি পাই mv: illegal option -- tযা কারণ ওক্সের এমভি-এর -tবিকল্প নেই।
লকউব্রব

1
(আমি এটি চেষ্টা করে দেখিনি, এবং এটির জন্য পরিকল্পনাও করি না)) এই লিঙ্কটি আপেল.স্ট্যাকেক্সেঞ্জারভিউ / সেকশনস / 2৯২২২/২ আপনাকে জানায় যে কীভাবে জিনুকোর ইনস্টল করতে হয় যা আপনাকে gnu কোর ক্লিপ ব্যবহারগুলি পেতে সহায়তা করবে, বিএসডি সহ ওক্স জাহাজগুলি পেতে পারে ক্লাইনের সরঞ্জামগুলি যা লিনাক্সের সাথে আসে তার চেয়ে আলাদা।
লকউব্রব

আমি ওএসএক্সে চলেছি zsh, তাহলে সম্ভবত ওএস কি তাহলে ..? স্পষ্ট করার জন্য ধন্যবাদ!
কনস্ট্যান্টফুন

7

সাধারণ ধারণা। ধরে নেওয়া যাক যেখানে আপনি থাকেন / myuser , নামান্তর ডাউনলোডসমূহ থেকে নতুন , একটি নতুন তৈরি ডাউনলোডসমূহ ডিরেক্টরির তারপর সরানো নতুন তা।

mv downloads new # downloads is now called new
mkdir downloads # create new directory downloads
mv new downloads # move new into it.

1

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

find /myuser/downloads/ -type d -name 'new' -prune -type f | xargs mv -t /myuser/downloads/new

এটি সমস্ত ফাইল সন্ধান করবে এবং তারপরে সেগুলি আপনার সাবফোল্ডারে নিয়ে যাবে।

@ ওয়ালটিনেটর: -type d -name 'new' -pruneট্র্যাভারসাল প্রতিরোধে যুক্ত করা হয়েছে /myuser/downloads/new


আমি নামের একটি উপ-ডিরেক্টরি তৈরি করেছি newএবং এই আদেশটি চেষ্টা করেছি, পেয়েছি mv: missing file operandএবংTry 'mv --help' for more information
mook765

1

আপনি এই বিকল্প প্রক্রিয়াটি চেষ্টা করতে পারেন the পথেই থাকুন

/myuser/downloads/

কিন্তু, এর পরিবর্তে প্রথম তৈরি করার /myuser/downloads/new/ডিরেক্টরির পরিবর্তে একটি ফোল্ডার তৈরি /myuser/ডিরেক্টরি কমান্ড সঙ্গে, mkdir ../newতারপর, সব ফাইল স্থানান্তর downloadsকরার জন্য new, এবং পরিশেষে সরানো newমধ্যে downloads/myuser/downloads/কমান্ডটি সহ আপনি পথে এক লাইনে এটি করতে পারেন :

mkdir ../new && mv * ../new && mv ../new ../downloads

এই ক্ষেত্রে, আপনাকে ফাইল / ফোল্ডারগুলির কোনও ধরণের "ফিল্টারিং" সম্পর্কে উদ্বিগ্ন হওয়ার দরকার newনেই , যেহেতু একই স্তরের পথটি রয়েছে downloads, সুতরাং আপনি কেবল সমস্ত কিছুতে সরিয়ে নিতে downloadsপারেন new, এবং তারপরে newডাউনলোডগুলিতে স্থানান্তর করতে পারেন `

তবে, যদি আপনি ইতিমধ্যে সাবফোল্ডারটি newতৈরি করে রেখেছেন এবং অন্য কোনওটি তৈরি করতে না চান , চিন্তার দরকার নেই –– উপরের দিকে কমান্ডের উপরে প্রদর্শিত কমান্ডের mkdirপ্রথম বাম দিকে কমান্ডটি পরিবর্তন করুন , এতে চাপ দিন পথ; অন্য কথায়, যখন আপনি এখনও আছেন , আপনি পরিবর্তন করতে পারেন থেকে । তারপরে সাব-ফোল্ডারটি [পথে ) সমান স্তরে উঠে যায় এবং তারপরে উপরের মতো প্রদর্শিত বাকী কমান্ডটি চালাতে পারেন। সমস্ত একসাথে, আমরা পথ থেকে শুরু :&&mvnew/myuser/downloads/mkdir ../newmv new ..new/myuser/downloads/new//myuser/new//myuser/downloads//myuser/downloads/

mv new .. && mv * ../new && mv ../new ../downloads

এবং, যেহেতু আপনি "ডাউনলোড ফোল্ডারে সমস্ত ফাইল এবং ফোল্ডার / উপ-ফোল্ডারগুলিকে সাব-ফোল্ডার [ new]] এ সরিয়ে নিতে চেয়েছিলেন, তাই আপনি সম্পন্ন করেছেন! আপনি যদি কেবল ফাইলগুলি (বা কেবল ফোল্ডারগুলি বা [আরও দানাদার বস্তু আন্দোলন সন্নিবেশ করানো) সরিয়ে নিতে চেয়েছিলেন , তবে আপনাকে অন্যান্য কমান্ডগুলি ব্যবহার করতে হবে যা অবজেক্টগুলিকে "ফিল্টার" করতে পারে grep। যদিও উপরে লেখা আদেশগুলি আপনার উদ্দেশ্যে যথেষ্ট।

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