GNU headऔर tailCoreutils संस्करण 8.25 के बाद से इसके लिए एक -zविकल्प है।
पुराने संस्करणों के साथ या गैर जीएनयू प्रणालियों के लिए, आप कोशिश करते हैं और स्वैप कर सकते हैं \0और \n:
find ... -print0 |
tr '\0\n' '\n\0' |
head |
tr '\0\n' '\n\0'
ध्यान दें कि कुछ headकार्यान्वयन NUL वर्णों के साथ सामना नहीं कर सकते हैं (और वे POSIX द्वारा आवश्यक नहीं हैं), लेकिन जहां समर्थन पाते हैं -print0, headऔर पाठ उपयोगिताओं आमतौर पर NUL वर्णों का समर्थन करते हैं।
आप दोनों trs के बीच किसी भी कमांड को लपेटने के लिए एक फंक्शन का उपयोग कर सकते हैं :
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)