खोज पर Print0 विकल्प के साथ कम उत्पादन मिला?


10

मैंने मैन पेज और अन्य संदर्भों को पढ़ा है, लेकिन मैं अभी भी -print0विकल्प के साथ खोज के व्यवहार से भ्रमित हूं ।

-print0      This primary always evaluates to true.  It prints the pathname of
             the current file to standard output, followed by an ASCII NUL
             character (character code 0).

पहला आदेश:

$ find /some/path/ -iname "*intro*jpeg" -o -iname "*intro*jpg" 2> /dev/null
/some/path//asdf199Intro-5kqlw.jpeg
/some/path/199intro-2jjaj.JPEG
/some/path/199intro-3.jpg
/some/path/wuer199intro-4.JPG
/some/path/xbzf199INTRO-1.jpg

दूसरा आदेश:

$ find /some/path/ -iname "*intro*jpeg" -o -iname "*intro*jpg" 2> /dev/null -print0
/some/path/136intro-3.jpg/some/path/wuer136intro-4.JPG/some/path/xbzf136INTRO-1.jpg

मैं देख सकता हूँ कि दूसरी कमांड के फ़ाइल नाम अलग वर्णों से अलग हैं, लेकिन मुझे 5 से ऊपर के विपरीत 3 आउटपुट क्यों मिलते हैं?


1
तकनीकी रूप से, वे शून्य समाप्त हो गए हैं , शून्य अलग नहीं हुए हैं। (हर पथनाम के बाद एक NUL है, जिसमें अंतिम एक भी शामिल है।)
cjm

जवाबों:


12

आपका पहला उदाहरण

 find /some/path/ -iname "*intro*jpeg" -o -iname "*intro*jpg"

के बराबर नहीं है

 find /some/path/ -iname "*intro*jpeg" -o -iname "*intro*jpg" -print

के बराबर है

 find /some/path/ \( -iname "*intro*jpeg" -o -iname "*intro*jpg" \) -print

जब आपके एक्सप्रेशन के अलावा कोई अन्य क्रिया होती है -purge, तो निहित प्रिंट अब जोड़ा नहीं जाता है। तुम्हें चाहिए

find /some/path/ \( -iname "*intro*jpeg" -o -iname "*intro*jpg" \) -print0 2> /dev/null

इसका कारण यह है कि आपको केवल 3 फ़ाइलनाम मिल रहे हैं, वे हैं जो आपकी दूसरी स्थिति से मेल खाते हैं (एक क्रिया है)। आपने जो टाइप किया है, उसका वास्तव में मतलब है

find /some/path/ \( -iname "*intro*jpeg" \) -o \( -iname "*intro*jpg" -print0 \)

जो उम्मीद करता है कि यह स्पष्ट है कि केवल 1 पक्ष कुछ भी क्यों प्रिंट करता है।


FYI करें आप के साथ खोज अभिव्यक्ति को सरल कर सकते हैं: find /some/path -iregex '.*intro.*\.jpe?g'... और चूँकि अब केवल एक ही अभिव्यक्ति है यह cjm द्वारा हाइलाइट किए गए मुद्दे से बचना होगा।
कैस

@ cjm कोष्ठकों ने मेरा दिन बचाया, मैंने अपनी स्क्रिप्ट में 0-दिन का बग तय किया !!!
लीसी

@mltsy यह भ्रामक नहीं है, इसकी नियमित अभिव्यक्ति ;-)
लीसी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.