* নিক্স ওয়ান-লাইনার: পুনরাবৃত্তভাবে এক্সটেনশান দ্বারা ফাইলগুলি সন্ধান করুন এবং সেগুলি এক্সটেনশনের নামে একটি নতুন ডিরেক্টরিতে অনুলিপি করুন


2

বিভিন্ন ডিরেক্টরি / উপ-ডিরেক্টরিতে বিভিন্ন ফাইল ধরণের (সিএসভি, টিএসটিএসটি, জেপিজি ইত্যাদি) দেওয়া, কোন নির্দেশটি প্রতিটি ডিরেক্টরি পুনরাবৃত্তভাবে অনুসন্ধান করবে এবং প্রতিটি এক্সটেনশানের নাম অনুসারে একটি নতুন শীর্ষ-স্তরের ডিরেক্টরিতে ফাইলগুলি অনুলিপি করবে।

ওয়ান-লাইনার দিয়ে এটি সম্পাদন করার কোনও উপায় আছে কি?


1
আপনার যে কমান্ডটি কল করা প্রয়োজন find। আপনি এটিকে ওয়ান-লাইনার হিসাবে তৈরি করতে পারেন
অ্যালেক্স

কেন এটি এক লাইনে থাকতে হবে?
শেঠ

আমি কল্পনা করতে পারি যে তারা এসএসএইচ বা এমন কোনও কিছু দিয়ে চালানোর জন্য একটি কমান্ড চায় যেখানে গন্তব্য সিস্টেমে প্রয়োজনীয় স্ক্রিপ্ট উপস্থিত না থাকে।
স্টুডস

উত্তর:


1

সমাধান

নিম্নলিখিত কমান্ডটি বর্তমান ডিরেক্টরি ( .) এর সমস্ত ফাইল তালিকাভুক্ত করবে এবং তাদের এক্সটেনশনের নাম অনুসারে ডিরেক্টরিগুলিতে স্থানান্তরিত করবে ./OUTPUT:

for file in $(find . -type f) ; do EXTENSION=$(echo "$file" |sed 's/.*\.//g') ; rsync -av $file ./OUTPUT/$EXTENSION/ ; done

উপরের কমান্ডটি চালানোর আগে আপনার প্রয়োজন হবে:

  • বর্তমান ডিরেক্টরিতে OUTPUT ডিরেক্টরি তৈরি করুন ( mkdir OUTPUT)
  • সাবডিরেক্টরিগুলির যে কোনও একটিতে নামের সাথে মিল থাকা কোনও ফাইল নেই তা নিশ্চিত করুন

ব্যাখ্যা

প্রথমত, লুপটি fileআউটপুট থেকে একটি ফাইলের সাথে ভেরিয়েবল বরাদ্দ করে find . -type ffindকমান্ডের উদাহরণ আউটপুট নীচে রয়েছে:

./a/myfile1.zip
./a/b/adoc1.txt
./a/b/adoc2.txt
./a/b/adoc3.txt
./a/b/adoc4.txt
./a/myfile3.zip
./a/myfile4.zip
./a/myfile2.zip

ভেরিয়েবলটি EXTENSIONতৈরি করা হয় এবং এর মান হ'ল fileসর্বশেষ স্টপ স্ট্রপ আউট অব স্ট্রিপ সহ সমস্ত কিছু দিয়ে ভেরিয়েবল। তাই ./a/myfile1.zipহয়ে যাবে zip

তারপরে ফাইলটি এক্সটেনশনের নামে নামের vমধ্যে একটি ডিরেক্টরিতে (ভার্বোসিটি সহ ) সিঙ্ক করা OUTPUTহয়।

কিছু পরীক্ষায় এই আদেশটি চালানোর পরে আমার ফাইল ট্রিের একটি উদাহরণ:

./a
./a/b
./a/b/adoc1.txt
./a/b/adoc2.txt
./a/b/adoc3.txt
./a/b/adoc4.txt
./a/b/c
./a/myfile1.zip
./a/myfile2.zip
./a/myfile3.zip
./a/myfile4.zip
./b
./b/c
./b/c/d
./b/c/file1.txt
./b/c/file2.txt
./b/c/file3.txt
./b/c/file4.txt
./c
./c/d
./c/d/e
./c/d/e/afile1.rar
./c/d/e/afile2.rar
./c/d/e/afile3.rar
./c/d/e/afile4.rar
./OUTPUT
./OUTPUT/rar
./OUTPUT/rar/afile1.rar
./OUTPUT/rar/afile2.rar
./OUTPUT/rar/afile3.rar
./OUTPUT/rar/afile4.rar
./OUTPUT/txt
./OUTPUT/txt/adoc1.txt
./OUTPUT/txt/adoc2.txt
./OUTPUT/txt/adoc3.txt
./OUTPUT/txt/adoc4.txt
./OUTPUT/txt/file1.txt
./OUTPUT/txt/file2.txt
./OUTPUT/txt/file3.txt
./OUTPUT/txt/file4.txt
./OUTPUT/zip
./OUTPUT/zip/myfile1.zip
./OUTPUT/zip/myfile2.zip
./OUTPUT/zip/myfile3.zip
./OUTPUT/zip/myfile4.zip

0

এই সঙ্গে খুব সহজভাবে সম্পন্ন করা যেতে পারে খোঁজ , যেমন সঠিকভাবে অ্যালেক্স দ্বারা প্রস্তাবিত: সংগ্রহ অভিমানী ফাইল জন্য স্ক্যান করতে path1 / থেকে / / কিছু / Dir , এবং আপনি ফাইল সরানো চান / path2 / / অন্যান্য / Dir / টেক্সট থেকে এবং শীঘ্রই,

find /path1/some/dir -type f -exec bash -c 'MYDIR=/path2/to/other/dir${0##*.}; [ -d $MYDIR ] && mv $0 $MYDIR  || mv $0 /path3/to/miscellanea' {} \; 

এই কমান্ডটি প্রথমে ডিরেক্টরি / পথ 1 / to / কিছু / dir এবং এর সমস্ত উপ- ডিরেক্টরিতে অন্তর্ভুক্ত সমস্ত ফাইল ( -প্রকার ) খুঁজে বের করে , তারপর এই জাতীয় প্রতিটি ফাইলের ( {} ) নাম একটি ছোট বাশ দ্বি-লাইনারে প্রেরণ করে , যা প্রথমে ফাইলের নামটি ( ব্যাশের অভ্যন্তরে $ 0 হিসাবে উল্লেখ করা হয় ) থেকে এক্সটেনশনটি বের করে এবং এটি স্থানীয় শেল ভেরিয়েবল এমওয়াইডিআইআরকে নির্ধারণ করে , তারপরে উপযুক্ত ডিরেক্টরিটির অস্তিত্বের জন্য পরীক্ষা করে (যদি কোনও ডিরেক্টরি নেই, তবে সম্ভবত আমরা ভুল করেছি) , এবং যদি ডিরেক্টরিটি উপস্থিত থাকে ( && ... ) এটি ফাইলটিকে যথাযথ ডিরেক্টরিতে সরিয়ে দেয়, অন্যথায় ( || ... ) এটি ফাইলটিকে একটি ডিফল্ট জায়গায় রাখে, / পথ 3 / থেকে / বিবিধ

উপরের দিক থেকে ধরে নেওয়া হয়েছে যে আপনি ইতিমধ্যে প্রয়োজনীয় ডিরেক্টরিগুলি, / পাথ 2 / থেকে / অন্যান্য / দির / টিএসটি এবং আরও তৈরি করেছেন। পরিবর্তে আপনি যদি সেগুলি চলতে শুরু করতে চান তবে আপনাকে উপরের হিসাবে এটি সংশোধন করতে হবে:

find /path1/some/dir -type f -exec bash -c 'MYDIR=/path2/to/other/dir/${0##*.}; mkdir -p $MYDIR && mv $0 $MYDIR' {} \; 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.