"সন্ধান" এর আউটপুট বাছাই করা হচ্ছে?


77

findকমান্ডে পাইপ করার আগে আউটপুটটিকে বর্ণানুক্রমিকভাবে বাছাই করতে সক্ষম হতে হবে । এর | sort |মধ্যে প্রবেশ করা কাজ করে না, তাই আমি কী করতে পারি?

find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand

উত্তর:


52

findযথারীতি ব্যবহার করুন এবং NUL এর সাথে আপনার লাইনগুলি সীমিত করুন। জিএনইউ sortএগুলি -z সুইচ দিয়ে পরিচালনা করতে পারে:

find . -print0 | sort -z | xargs -r0 yourcommand

58

কয়েকটি সংস্করণে sortএকটি -zবিকল্প রয়েছে, যা নাল-সমাপ্ত রেকর্ডগুলির জন্য মঞ্জুরি দেয়।

find folder1 folder2 -name "*.txt" -print0 | sort -z | xargs -r0 myCommand

অতিরিক্তভাবে, আপনি এটি করতে একটি উচ্চ-স্তরের স্ক্রিপ্টও লিখতে পারেন:

find folder1 folder2 -name "*.txt" -print0 | python -c 'import sys; sys.stdout.write("\0".join(sorted(sys.stdin.read().split("\0"))))' | xargs -r0 myCommand

এটি যুক্তির মাধ্যমে ডাকা হয়েছে তা নিশ্চিত করার জন্য -rবিকল্পটি যুক্ত করুন ।xargsmyCommand


ভাল একটি (দুটি?) ... মজার বিষয় হল, যদিও দুটি পদ্ধতি .ভিন্নভাবে পরিচালনা করে ... sortতালিকাটির শেষে এটি বাতাসে চলে যায় ... pythonএটি শীর্ষে সাজানো থাকে। (সম্ভবত LC_COLLATE=C
পাইথনটি এর

রয়েছে -t \0সাজানোর জন্য বিকল্প (যা একটি হল -zপ্রতিশব্দ)
জাভিয়ের

1
এই সমস্ত |sortসমাধানগুলির সমস্যা হ'ল আপনি -execআর ব্যবহার করতে পারবেন না । ঠিক আছে, যদিও আপনার বিবৃতিটি -execযাতে এটি দিয়ে কাজ করে তাতে পুনরায় লেখা সম্ভব হয় xargs, প্রশ্নটি হল "মিনি-স্ক্রিপ্টগুলি" সম্পর্কে কী ? ( sh -c ...) আমি একাধিক কমান্ডের সাহায্যে 'sh -c' মিনি-স্ক্রিপ্টকে রূপান্তর করতে সেই তুচ্ছটিকে কল করব না যাতে এটি xargs(যদি সম্ভব হয় তবে, তা) কাজ করতে পারে
সিনট্যাক্সারর

@ সাইন্ট্যাক্সেরর: এক্স-জার্স সহ sh -c ব্যবহার করতে আপনার কী সমস্যা? printf %s\\n a b c d e | xargs -n3 sh -c 'printf %s, "$@"; printf \\n' x
রজার পেট

4

আমি মনে করি আপনার -nসাজানোর জন্য পতাকাটি দরকার #

মানুষের অনুসারে সাজান:

-n, --numeric-sort
    compare according to string numerical value

সম্পাদন করা

মুদ্রণ0 এর সাথে কিছু করার থাকতে পারে, আমি এটি ঠিক পরীক্ষা করেছি। মুদ্রণ0 টি বের করুন, আপনি -zপতাকাটি ব্যবহার করে স্ট্রিংটি বাছাই করে বাতিল করতে পারেন


ঠিক আছে, print0এটি ফাইল-নামগুলি স্পেস-বিভাজন হিসাবে দেখা যাচ্ছে যা আমার কমান্ডের কাছে যা দরকার তা হ'ল দুর্ভাগ্যক্রমে
শিল্প

1

আপনার যদি জিএনইউ সমান্তরাল http://www.gnu.org/software/parallel/ ইনস্টল থাকে তবে আপনি এটি করতে পারেন:

find folder1 folder2 -name "*.txt" -print | 
  sort |
  parallel myCommand

আপনি জিএনইউ সমান্তরাল সহজেই এটি ইনস্টল করতে পারেন:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

আরও জানতে জিএনইউ সমান্তরালের জন্য অন্তর্ভুক্ত ভিডিওগুলি দেখুন: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1


জিএনইউ সমান্তরাল ব্যবহারের যৌক্তিকতা কী? এটি দ্রুত করতে?
পিটার মর্টেনসেন

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