4ae1e1 की टिप्पणी से उधार कोड:
प्रत्येक कमांड-लाइन-निर्दिष्ट उपनिर्देशिका में नियम (यदि कोई है) का पहला अपवाद पाएं। प्रिंट करें कि अगर इसकी अनुमति है।
dir_filesize_rangefilter() {
# args: lo hi paths...
# sizes in MiB
# return value: dir names printed to stdout
local lo=$1 hi=$2
shift 2 # "[email protected]" is now just the paths
for dir; do # in "[email protected]" is implicit
local safedir=$dir
[[ $dir = /* ]] || safedir=./$dir # make sure find doesn't treat weird -filenames as -options
# find the first file smaller than lo or larger than hi
[[ -z "$(find "$safedir" -type f
\(-size "-${lo}M" -o -size "+${hi}M" \)
-print -quit)"
]] && printf '%s\n' "$dir"
done
}
मैं "printf" क्योंकि "गूंज" टूट जाता है प्रयोग किया जाता है, तो निर्देशिका नामों में से एक -e
या कुछ और के साथ शुरू होता है। यदि आप वास्तव में वैध फ़ाइल नामों के बारे में पागल होना चाहते हैं, तो आप इस सरणी को एक सरणी में निर्देशिका में जोड़ने की अनुमति दे सकते हैं, क्योंकि यदि आप वास्तव में while IFS= read
लूप या किसी भी चरित्र को अनुमति देने के लिए इसके आउटपुट को पार्स करना चाहते हैं , और है कि अभी भी dir एक नई पंक्ति युक्त नाम पर टूट जाता है)
जाहिर है तो चलो वाक्य रचना हाइलाइटिंग $(command substitution)
अंदर के भावों का हवाले से नियम नहीं जानता है:।/
स्रोत
2015-11-28 11:39:28
'प्रयास करें du' और' awk'। – Cyrus
इस बात पर टिप्पणी किए बिना कि "डु 'और' awk' 'का उपयोग करना बेहतर है या नहीं, आप निश्चित रूप से' खोज 'से जुड़े छद्म-एक-लाइनर के साथ ऐसा कर सकते हैं:' dir1 dir2 में dir के लिए; करें [[-z "$ (ढूंढें" $ dir "-type f \ (-size -10c -o -size + 20c \) 2>/dev/null)"]] &&cho "$ dir"; done'। (आपको आउटपुट के रूप में 'dir1' प्राप्त करना चाहिए।) – 4ae1e1
क्या आपका मतलब निर्देशिका में फ़ाइलों का कुल आकार या एक फ़ाइल का आकार है? – OznOg