সমস্ত ডিরেক্টরি উপ ডিরেক্টরি থেকে বর্তমান ডিরেক্টরিতে সরান?


14

কীভাবে আমি সমস্ত উপ-ডিরেক্টরিগুলিতে থাকা ফাইলগুলি বর্তমান ডিরেক্টরিতে স্থানান্তর করতে পারি, এবং তারপরে খালি উপ-ডিরেক্টরিগুলি সরাতে পারি?

আমি এই প্রশ্নটি পেয়েছি , তবে এর উত্তরটি মানিয়ে নিচ্ছি :

mv * .

এটা কাজ করছে না; আমি দেখতে অনেক সতর্কতা পেয়েছিলাম:

mv: wil and ./wil are identical

সাব ডিরেক্টরিতে থাকা ফাইলগুলির স্বতন্ত্র নাম রয়েছে।

উত্তর:


22

আপনি -mindepthবিকল্পটিও ব্যবহার করতে পারেন :

find . -type f -mindepth 2 -exec mv -i -- {} . \;

( -maxdepthআপনার সাথে একসাথে ফাইলগুলি সংগ্রহ করার জন্য স্তরক্রমের স্তরগুলিও সীমাবদ্ধ করতে পারে))

ফাইলগুলি ওভাররাইট করার আগে জিজ্ঞাসা mv -iকরার জন্য আমি ("ইন্টারেক্টিভ") ব্যবহার করেছি mv। প্রচুর উপ-ডিরেক্টরিগুলির সাথে, এমন নাম সংঘর্ষ হতে পারে যা সম্পর্কে আপনাকে সতর্ক করতে চাই।

--বিকল্প বিকল্প প্রক্রিয়াকরণ স্টপ, তাই mvএকটি হাইফেন দিয়ে শুরু ফাইলের নামের দ্বারা বিভ্রান্ত না হয়ে যায়।

এর সাথে খালি সাব ডাইরেক্টরিগুলির পুরো গুচ্ছটি পরিষ্কার করুন

find . -depth -mindepth 1 -type d -empty -exec rmdir {} \;

ওভাররাইট না করে ফাইলগুলি ওভাররাইটিংয়ের জন্য প্রশ্নটি এড়িয়ে যাওয়ার কোনও উপায় আছে কি?
ফিলিওর

2
এমভি জন্য বিকল্প:: -n, --no-clobberএকটি বিদ্যমান ফাইল ওভাররাইট করবেন না। -b, --backupআপনারও আগ্রহী হতে পারে ।
ফ্লোরিয়ান জেন

5

এটা চেষ্টা কর:

find ./*/* -type f -print0 | xargs -0 -J % mv % .

আরও তথ্য: সন্ধানের-স্ট্যামমেন্টটি একা চেষ্টা করে দেখুন, এটি স্থানান্তর করতে চান এমন সমস্ত ফাইলের সাথে একটি তালিকা দেবে (এগুলি ছেড়ে দিন -print0)। উদাহরণ:

probe:test trurl$ find ./*/* -type f
./test_s/test_s_s/testf4
./test_s/test_s_s/testf5
./test_s/testf1
./test_s/testf2
./test_s/testf3
./test_s2/testf6
./test_s2/testf7

সঙ্গে -print0এবং xargsআপনি এখন বিবৃতি একটি তালিকা তৈরি করছেন নিষ্পন্ন করা হবে। -J %পতাকা মানে, তালিকা উপাদান এখানে সন্নিবেশ, তাই mv $FILE .পাওয়া যে ফাইলের জন্য মৃত্যুদন্ড কার্যকর করা হয়।

উপরের বিএসডি xargs জন্য কাজ করছে। আপনি যদি GNU- সংস্করণ (লিনাক্স) -I %ব্যবহার করেন তবে এর পরিবর্তে নিন-J %


0

বাশ 4:

shopt -s globstar
for file in **; do [[ -f "$file" ]] && mv "$file" .; done

0
mv */* .

এটি সমস্ত উপ-ডিরেক্টরি থেকে সমস্ত ডিরেক্টরিকে বর্তমান ডিরেক্টরিতে স্থানান্তরিত করবে।

আপনার যদি কিছু পরিষ্কার প্রয়োজন হয়, আপনি ব্যবহার করতে পারেন

find . -type d -empty -delete

এটি সমস্ত খালি উপ-ডিরেক্টরি মুছে ফেলবে।


-2

1 দ্রুত কৌশল, কেবলমাত্র যদি আপনার ফাইলগুলির এক্সটেনশন থাকে (ডট সহ) কাজ করে:

mv *.* subdir/
mv .* subdir/

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