GNU head
और tail
Coreutils संस्करण 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
s के बीच किसी भी कमांड को लपेटने के लिए एक फंक्शन का उपयोग कर सकते हैं :
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
)