কিভাবে ইউনিক্স মধ্যে শুধুমাত্র ফাইল সরানো


16

কিভাবে আমি লিনাক্সের এক ফোল্ডার থেকে অন্য ফোল্ডারে কেবলমাত্র প্লেইন ফাইল (ডিরেক্টরিগুলি নয়) ব্যবহার করতে পারি mv কমান্ড?

আমি চেষ্টা করেছি mv * ~/, কিন্তু এটি ডিরেক্টরি সহ সবকিছু কপি।


আপনার মন্তব্যগুলি অতিরিক্ত সীমাবদ্ধতা উল্লেখ করে: কমান্ডটি বর্তমান কাজের ডিরেক্টরি থেকে লুকানো ফাইলগুলি সরানো উচিত নয়। যদি এটি সঠিক হয় তবে আপনি কি এটিকে উল্লেখ করতে আপনার প্রশ্ন সম্পাদনা করতে পারেন? "কেবলমাত্র ফাইলগুলি সরান" বলে আমাদের মনে হয় "সব ফাইল সরান", যা লুকানো ফাইলগুলি অন্তর্ভুক্ত করে।
quack quixote

উত্তর:


24

আপনি চেষ্টা করতে পারেন

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

2
বাহ, খুঁজে বের করতে কিভাবে কেউ জানেন। সম্পূর্ণতার জন্য আপনাকে -name [^।] * খুঁজে বের করতে হবে, অর্থাৎ --- সন্ধান করুন। -maxdepth 1-টাইপ f -name [^।] * -exec এমভি {} পাথ \;
chris

5

আমি একটি "সবকিছুর জন্য একটি হাতুড়ি ব্যবহার করুন" আমি একজন মানুষ বাইরের প্রোগ্রাম ব্যবহার করে স্টাফ জন্য বোর্ন শেল প্রোগ্রাম ব্যবহার করি ...

for file in * .* 
do
  test -f "$file" && mv "$file" "$HOME"/
done

কিছু লোক যতটা সম্ভব ছোট টাইপিংয়ে কাজ করতে পছন্দ করে তবে আমি খুব দ্রুত টাইপস্টিস্ট এবং আমার মস্তিষ্কের মধ্যে এটি এমন স্টাফ পেয়েছে যাতে এটি সঠিকভাবে দেখার পরিবর্তে এটি করতে ব্যথা বেশি না। অনুসন্ধান এবং exec এবং সব যে আর্গুমেন্ট।

YMMV, যদিও ...


যে জন্য আমি এটা চেষ্টা করবে। কিন্তু আমি এখনও অন্য উত্তর প্রয়োজন কারণ এটি একটি প্রকল্পের জন্য আমি লিনাক্স কোর্সে করছি। অনেক ধন্যবাদ

1
এই হয় আপনার প্রশ্নের একটি উত্তর। এমভি ফাইল বা ডিরেক্টরি বা পিনোস বা অন্যান্য বিশেষ ফাইল কোন বোঝার আছে। এমভি শুধুমাত্র ডিরেক্টরি এন্ট্রি এবং ইনডো বোঝে, এবং যতদূর এটি উদ্বিগ্ন, সেগুলি সমস্ত ফাইল টাইপ নির্বিশেষে একই। এমভি শুধুমাত্র একটি নির্দিষ্ট ধরনের ফাইল সরানোর মঞ্জুরি দিতে, আপনাকে এমন কোনও পরীক্ষা করতে হবে যা অনুসন্ধানের জন্য বা অনুসন্ধান করতে পারে যা প্রকৃতপক্ষে ইনয়েডটিকে ফাইলটি দেখতে দেখতে পারে। অন্য কথায়, আপনাকে যদি এটি করার জন্য বলা হয় তবে আপনাকে একটি কৌতুক প্রশ্ন জিজ্ঞাসা করা হচ্ছে কেবল এমভি সঙ্গে।
chris

1
এবং আমি বলি যে mv inodes বোঝে কেবল কারণ এটি একটি ফাইল সিস্টেমে অন্য ফাইল থেকে সরানো সক্ষম হয়, যা টেকনিক্যালি একটি সিপি হয়, আর একটি আরএম থাকে না (যা আসলেই কেবল একটি LN তারপর আরএম হয়)। হার্ডলিঙ্ক এবং ডিরেক্টরি এন্ট্রি দেখুন।
chris

2
সংক্ষিপ্ত: এটি একটি ভাল উত্তর, আপনি এমভি কমান্ড (অন্তত শেল) ছাড়া কিছু ব্যবহার করতে হবে। এটা প্রোগ্রামিং ছাড়া পায় হিসাবে এটি একটি মৌলিক সম্পর্কে।
Kyle Brandt

2

@ মীরেঘস্ট খুব ঘনিষ্ঠ। আমি সব ফাইল (লুকানো ফাইল সহ) সরানো এখানে, কিন্তু ডিরেক্টরি নয়:

find . -maxdepth 1 -type f -name '*' -exec mv -n {} /destination_path \;

দ্য . খুঁজে বের করার পরে আপনি বর্তমান ডিরেক্টরিটি যে ফাইলগুলি সরাতে চান সেগুলির উৎস। যদি না হয়, কমান্ড সংশোধন করা যেতে পারে, নিম্নরূপ:

find /source_path -maxdepth 1 -type f -name '*' -exec mv -n {} /dest_path \;

আপনি কেবলমাত্র নিয়মিত ফাইলগুলি সরাতে চান এবং লুকানো ফাইলগুলি সরাতে চান না:

find . -maxdepth 1 -type f -name '[!.]*' -exec mv -n {} /dest_path \;

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

find . -maxdepth 1 -type f -name '.*' -exec mv -n {} /dest_path \;

-1

আপনি খুঁজে ব্যবহার করতে পারেন

find * -maxdepth 1 -type f -exec mv {} ~ \;

হ্যাঁ ভাল যে কাজ কিন্তু 100% এটি ডিরেক্টরি এবং উপ ডিরেক্টরি থেকে সমস্ত ফাইল কপি ~ ~ / অবস্থান। আমার শুধু খুব মৌলিক কিছু দরকার যা ফাইলগুলি অনুলিপি করে লুকিয়ে রাখে, আর আমি অন্য কোনও ডিরে লুকিয়ে থাকি। এটাই. যাইহোক পরামর্শ জন্য ধন্যবাদ

এটি 1 হিসাবে maxdepth সঙ্গে অসম্ভব।
John T

নির্দিষ্ট তাই এটি লুকানো ফাইল কপি হবে না।
John T

1
অনুসন্ধানের সিনট্যাক্স তারপর একটি ডিরেক্টরি তারপর অপারেশন বিবরণ এবং মেলে জিনিস খুঁজে পেতে হয়। কখনও কখনও এটি একটি গ্লোবালকার্ড ব্যবহার করবে না যেমন এটি * গ্লোব্বিং থেকে রক্ষা না করে * (যেমন খুঁজুন / পাথ / থেকে / ডিরেক্টরি-নাম goo * -type f।
chris

1
আপনি এটি পরীক্ষা করার জন্য একটি একক পাথ হাতে যদি শুধুমাত্র সঠিকভাবে কাজ করে। উদাহরণস্বরূপ, উদাহরণস্বরূপ, যদি কোনও ফাইল থাকে যা একটি - দিয়ে শুরু হয় অপ্রত্যাশিতভাবে বিস্ফোরিত হবে। আপনি শুধুমাত্র একটি প্রোগ্রাম ডিরেক্টরি এন্ট্রি পড়া না থাকার চেয়ে অনেক ভাল, এবং আপনার উদাহরণে, আপনি দুটো ভিন্ন প্রোগ্রাম ব্যবহার করে (খুঁজে এবং শেল)।
chris

-2

mv `find ./sourcedir/* -type f` ./destdir


2
এটি যে কোনও ফাইলের জন্য ব্যর্থ হবে যার মধ্যে হোয়াইটস্পেস থাকবে। ফাইল নামগুলি মুদ্রণ করে এমন কমান্ডের আউটপুট কখনই পার্স করা উচিত না যতক্ষণ না এটি নিশ্চিত করা যায় যে এটি সঠিকভাবে সীমাবদ্ধ। দেখ কেন আপনি ls (1) আউটপুট পার্স করা উচিত নয় প্রধান ধারণা জন্য। ব্যবহার find এর -exec বিকল্পটি এড়াতে সর্বোত্তম উপায়।
slhck
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.