कैसे एक मैक निर्देशिका संरचना में सभी मीडिया फ़ाइल इकट्ठा करने के लिए?


0

मैं सभी मीडिया फ़ाइलों (मैक फ़ाइल प्रकार की छवि या मूवी) को एक ही निर्देशिका संरचना में कॉपी करने की कोशिश कर रहा हूं, केवल मीडिया फाइलें ले रहा हूं।

  1. क्या मेरे पास जो कुछ है उससे ज्यादा कुशल तरीका क्या है?
  2. क्या मैक ओएस में एक तंत्र छवि या मूवी के प्रकार को खोजने के लिए है?
  3. क्या यह एक इंटरमीडिएट टार फाइल के बिना किया जा सकता है? (मान लीजिए 100,000 मीडिया फाइलें)

विचार यह है:

  1. मीडिया फ़ाइलों की अस्थायी फ़ाइल सूची बनाएं (कमांड लाइन पर कई फाइलें नहीं ले जा सकते हैं)
  2. टार फ़ाइल बनाएँ
  3. टार फ़ाइल निकालें

किसी भी सलाह के लिए धन्यवाद।

# $1 is the directory to search for media
# $2 is the output file name
media_list() {
  find $1 -type f \( -iname "*.JPG" -o -iname "*.JPEG" -o -iname "*.NREF" -o -iname "*.TIFF" -o -iname "*.wmv" -o -iname "*.MOV" -o -iname "*.mp4" -o -iname "*.MPG" -o -iname "*.AVI" -o -iname "*.3g2" -o -iname "*.3gp" -o -iname "*.m4v" \) > $2
}

# $1 is the directory to get media
# $2 is the output tar file name
tar_media() {
  rm file-list.txt
  media_list $1 file-list.txt
  tar -cv -f $2 -I file-list.txt 
}

जवाबों:


1

विभिन्न विकल्प:

mdfind -onlyin . 'kMDItemContentTypeTree=public.movie||kMDItemContentTypeTree=public.image' | parallel cp {} /tmp/{/}

  • समानांतर के साथ स्थापित किया जा सकता है brew install parallel
  • {/} बेसन है

find . -iname \*.mkv -o -iname \*.jpg | while IFS= read -r f; do cp "$f" /tmp/"${f%%*/}"; done

  • लाइनों के प्रारंभ और अंत से IFS में स्ट्रिप्स वर्ण पढ़ें
  • read -r बैकस्लैश की व्याख्या करने में अक्षम करता है
  • ${f%%*/} सबसे लंबे समय तक निकालता है */ शुरू से पैटर्न

shopt -s globstar extglob nocaseglob; for f in **/*.@(mkv|jpg); do cp "$f" "/tmp/${f%%*/}"; done

  • globstar (बाश 4.0 में जोड़ा गया) बनाता है ** निर्देशिकाओं के कई स्तरों से मेल खाते हैं
  • extglob के लिए समर्थन जोड़ता है @(pat1|pat2) (बिल्कुल एक)
  • nocaseglob ग्लब्स केस-असंवेदनशील बनाता है

f() { cp "$1" "/tmp/${1%%*/}"; }; export -f f; gfind . -regextype posix-extended -iregex '.*\.(mkv|jpg)' -print0 | xargs -0 -n1 bash -c 'f "$1"' _

  • OS X की खोज विस्तारित रेगेक्स का समर्थन नहीं करती है, इसलिए कमांड GNU खोज का उपयोग करता है
  • export -f तथा bash -c xargs के साथ फ़ंक्शन को चलाने के लिए आवश्यक हैं
  • xargs -n1 एक समय में एक तर्क लेता है

वहाँ कोई नहीं parallel डिफ़ॉल्ट रूप से OS X पर। यह भी मदद करेगा यदि आपने समझाया कि ये विकल्प क्या करते हैं
Daniel Beck

उन लोगों के पेशेवरों और विपक्षों को सूचीबद्ध करना बहुत अच्छा होगा, विशेष रूप से बड़ी संख्या में फाइलों के साथ बाहरी यूएसबी ड्राइव के साथ।
justingordon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.