আমি কীভাবে কেবল *। এমপি 3 ফাইলগুলি ls -R *.mp3একটি ডিরেক্টরিতে পুনরাবৃত্ত কমান্ড সহ সন্ধান করতে পারি যাতে বেশ কয়েকটি উপ ডিরেক্টরি রয়েছে এবং শেষে এই ফাইলগুলি আমার চয়ন করা ডিরেক্টরিতে অনুলিপি করে।
তোমার সহযোগিতার জন্যে ধন্যবাদ.
আমি কীভাবে কেবল *। এমপি 3 ফাইলগুলি ls -R *.mp3একটি ডিরেক্টরিতে পুনরাবৃত্ত কমান্ড সহ সন্ধান করতে পারি যাতে বেশ কয়েকটি উপ ডিরেক্টরি রয়েছে এবং শেষে এই ফাইলগুলি আমার চয়ন করা ডিরেক্টরিতে অনুলিপি করে।
তোমার সহযোগিতার জন্যে ধন্যবাদ.
উত্তর:
আদেশটি হ'ল:
find /path/to/directory -name "*.mp3" -exec cp {} /some/other/dir/ \;
বিকল্প:
find /path/to/dir/ -name '*.mp3' | xargs cp -t /target/
উদাহরণ:
alex@MaD-pc:~/test$ ls
1 2 3
alex@MaD-pc:~/test$ ls 1 2 3
1:
1.txt 2.mp3 3.txt
2:
4.txt 5.mp3 6.txt
3:
alex@MaD-pc:~/test$ find . -name "*.mp3" -exec cp {} 3/ \;
alex@MaD-pc:~/test$ ls 3
2.mp3 5.mp3
আরও তথ্যের জন্য:
man find
xargsসাধারণত অনেক দ্রুত হয়। আমি মাত্র একটি দ্রুত পরীক্ষা চালিয়েছি এখানে সি ফাইলের একটি লোড সন্ধান করে এবং ls -lসেগুলি চালিয়েছি । এটি 0 মি 2.420 সেকেন্ড xargsএবং 0 এম 25.494 এস এর জন্য -exec... স্পষ্টতই এই ক্ষেত্রে cpঅপারেশনটি বেশিরভাগ সময় নিতে চলেছে তাই সম্ভবত এটি কোনও ব্যাপার নয় তবে এটি লক্ষ করা উচিত।
-n`` switch to the সদৃশ নামগুলির ক্ষেত্রে ওভাররাইট এড়ানোর জন্য সিপিই কমান্ড যুক্ত করার পরামর্শ দিচ্ছি (বা লক্ষ্য হিসাবে অনুলিপি করার আগে নকলের জন্য পরীক্ষা করে এমন স্ক্রিপ্ট লিখতে হবে)
এটি করার আরও একটি উপায়ও রয়েছে যা আমি মনে করি আপনার উদ্দেশ্যটি নিখুঁতভাবে উপযুক্ত করবে। আপনি findএকটি whileলুপের সাথে একত্রিত করতে পারেন এবং এমনকি কোনওটি execবা একেবারে ব্যবহার করার প্রয়োজনও নেই xargs। উদাহরণস্বরূপ, আপনি যদি mp3sনিজের ডাউনলোড ফোল্ডার থেকে আপনার সঙ্গীত ফোল্ডারে অনুলিপি করতে চান , তবে আপনি নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করবেন যা আমি বহুবার ব্যবহার করেছি।
যে ডিরেক্টরিগুলি findঅনুসন্ধান করে এবং ফলস্বরূপ ফাইলগুলি স্থাপন করে সেগুলি পরিবর্তন করে আপনি কীভাবে এটি চান তা পরিবর্তন করতে পারেন ; যদি কোনও ডিরেক্টরি না বর্ণিত হয় findতবে পুরো হোম ফোল্ডারটি অনুসন্ধান করবে। আপনি বা অন্যান্য কমান্ডে পরিবর্তন cpকরতে পারেন mv। এটি বেশ দ্রুত, কারণ আমি এটি মাত্র 3945 .jpgফাইল দিয়ে পরীক্ষা করেছি ! এটি একটি পাঠ্য সম্পাদকে অনুলিপি করুন, এটি সংরক্ষণ করুন এবং তারপরে চালিয়ে এটি কার্যকর করুন chmod +x myscript।
#!/bin/bash
# a script to recursively find and copy files to a desired location
find ~/Downloads -type f -iname '*.mp3' -print0 |
while IFS= read -r -d '' f;
do cp -- "$f" ~/Music ;
done
এই উল্লিখিত বাশ উইকিতে এটি প্রদর্শিত হবে যে কমান্ডের আউটপুট প্রক্রিয়া করতে whileলুপ এবং readকমান্ডগুলি একত্রিত করতে এটি কতটা কার্যকর is findএবং আমি যেভাবে এটি করেছি এটি নিশ্চিত করে যে স্ক্রিপ্টটি ফাঁকা বা অন্য অপ্রত্যাশিত বা বিশেষ অক্ষরের সাথে ফাইলের নাম জুড়ে এসেছিল না।
findকমান্ডের আরও সাধারণ তথ্যের জন্য , টার্মিনালে প্রবেশ করুন man findবা উবুন্টু ম্যানেজগুলি অনলাইনে দেখুন । সন্ধানের ব্যবহারের দুর্দান্ত পরিচিতির জন্য এই নিবন্ধটিও দেখুন ।
find ~/Downloads -type f -iname '*.mp3' | while read mp3file; do cp "$mp3file" ~/Music; done?
-n`` switch to the সদৃশ নামগুলির ক্ষেত্রে ওভাররাইট এড়ানোর জন্য সিপিই কমান্ড যুক্ত করার পরামর্শ দিচ্ছি (বা লক্ষ্য হিসাবে অনুলিপি করার আগে নকলের জন্য পরীক্ষা করে এমন স্ক্রিপ্ট লিখতে হবে)
find /path/to/dir/ -name '*.c' | xargs cp -t /target/