জিএনইউ head
এবং tail
যেহেতু কোর্টিলস সংস্করণ 8.25 এর -z
জন্য বিকল্প রয়েছে।
পুরানো সংস্করণগুলির সাথে বা নন-জিএনইউ সিস্টেমগুলির জন্য, আপনি চেষ্টা করতে এবং অদলবদল করতে পারেন \0
এবং \n
:
find ... -print0 |
tr '\0\n' '\n\0' |
head |
tr '\0\n' '\n\0'
লক্ষ্য করুন যে কিছু head
বাস্তবায়নের NUL অক্ষর সঙ্গে মানিয়ে করতে পারবেন (এবং তারা না POSIX দ্বারা করতে হয়), কিন্তু যেখানে সমর্থন খুঁজে -print0
, head
এবং টেক্সট ইউটিলিটি সাধারণত NUL অক্ষর সমর্থন করি।
আপনি দুজনের মধ্যে যে কোনও কমান্ড মোড়ানো করতে একটি ফাংশনও ব্যবহার করতে পারেন tr
ফর্মের :
nul_terminated() {
tr '\0\n' '\n\0' | "$@" | tr '\0\n' '\n\0'
}
find ... -print0 | nul_terminated tail -n 12 | xargs -r0 ...
মনে রাখবেন যে এর অধীনে nul_terminated
, একটি \0
অর্থ একটি নতুন লাইনের চরিত্র। সুতরাং উদাহরণস্বরূপ, প্রতিস্থাপন \n
সঙ্গে_
:
find . -depth -name $'*\n*' -print0 | nul_terminated sed '
p;h;s,.*/,,;s/\x0/_/g;H;g;s,[^/]*\n,,' | xargs -r0n2 mv
( \x0
এছাড়াও একটি জিএনইউ এক্সটেনশন হচ্ছে)।
যদি আপনার একাধিক ফিল্টারিং কমান্ড চালানোর প্রয়োজন হয় তবে আপনি এটি করতে পারেন:
find ... -print0 |
nul_terminated cmd1 |
nul_terminated cmd2 | xargs -r0 ...
তবে এর অর্থ কয়েকটি অপ্রয়োজনীয় tr
কমান্ড চালানো। বিকল্পভাবে, আপনি চালাতে পারেন:
find ... -print0 | nul_terminated eval 'cmd1 | cmd2' | xargs -r0 ...
\x0
পরিবর্তে ব্যবহারের জন্য এটি কি প্রাথমিক কারণটিকে পরাজিত করে না\n
? (¹ যাতে আপনি থাকতে পারে এমন মানগুলির সাথে মানিয়ে নিতে পারেন\n
)