2010-10-10 10 views
6

मेरे पास रिकवरी के बाद एक्सटेंशन के बिना हजारों फ़ाइलें हैं (ज्यादातर चित्र)। मुझे फ़ाइल प्रकार द्वारा अलग फ़ोल्डरों में सॉर्ट करने की आवश्यकता है (सॉर्ट प्रक्रिया के दौरान फ़ोल्डरों को बनाया जाना चाहिए)। मैं "फ़ाइल" कमांड का उपयोग कर लिनक्स में फ़ाइल प्रकार निर्धारित कर सकता हूं। क्या किसी के पास इसके लिए बैश स्क्रिप्ट है?फ़ाइलों को फ़ोल्डर्स में बाल्टी पर फ़ाइल प्रकार से कैसे सॉर्ट करें ('file' कमांड के साथ)?

उदाहरण के लिए: प्रारंभिक डीआईआर में फाइलें हैं: 001, 002, 003, 004. सॉर्टिंग के बाद 3 डीआईआर होना चाहिए: 'जेपीईजी' में 001.jpg, 003.jpg शामिल है; 'टिफ' 002.tiff होते हैं और 'दूसरों' 004.

उत्तर

3

इस उत्तर प्रत्येक फ़ाइल है, जो

file -N --mime-type -F"-&-" * | awk -F"-&-" 'BEGIN{q="\047"} 
{ 
    o=$1 
    gsub("/","_",$2);sub("^ +","",$2) 
    if (!($2 in dir)) { 
    dir[$2] 
    cmd="mkdir -p "$2 
    print cmd 
    #system(cmd) #uncomment to use 
    } 
    files[o]=$2 
} 
END{ 
for(f in files){ 
    cmd="cp "q f q" "q files[f]"/"f".jpg" q 
    print cmd 
    #system(cmd) #uncomment to use 
} 
}' 

इसी तरह अनावश्यक है के लिए file आदेश कई बार निष्पादित नहीं करता है, bash4 + स्क्रिप्ट साहचर्य सरणियों का उपयोग कर के साथ किया जा सकता है।

3

शामिल कैसे कुछ इस तरह के बारे में:


mkdir -p `file -b --mime-type *|uniq` 
for x in `ls` 
do 
     cp $x `file -b --mime-type $x` 
done 

मैं सीपी उपयोग करें, यह निर्देशिका के साथ काम नहीं कर सकते हैं।

+0

आप ठीक कह रहे हैं, धन्यवाद, लेकिन देखते हैं के लिए एक उप निर्देशिका बनाना चाहिए कुछ कमियां (समायोजन देखें)। – hoxnox

+1

'ls' – ghostdog74

+0

का बेकार उपयोग मैं इसे कैसे समाप्त कर सकता हूं? –

2

Dadam के जवाब समायोजन:

#!/bin/bash 

file --mime-type -F"&" [YOUR PATH]/* > filetypes.txt 
mkdir -p `cut -f2 -d"&" filetypes.txt | sed 's/[ ,:]//g' | sort -u` 
for x in `cut -f1 -d"&" filetypes.txt` 
do 
    mv $x `file -b --mime-type $x | sed 's/[ ,:]//g'` 
done 
2

मैं इस का उपयोग करें और यह मेरे लिए काम करता है:

#!/bin/bash 

self_name=`basename "$0"` 
for f in * 
do 
    if [ -f "$f" ] && [ "$f" != "$self_name" ]; then 
     filename="${f%.*}" 
     ext="${f##*.}" 
     mkdir $ext 

     mv "$f" "$ext/$f" 

     htmlfiles="{$f}_files" 
     if [ -d "$htmlfiles" ];then 
      mv "$htmlfiles" "$ext/$htmlfiles" 
     fi 

     if [ $? -ne 0 ] 
      then 
      echo "Error: Failed mv $f" 
     fi 
    fi 

    if [ -d "$f" ];then 
     mv "$f" "$ext/$f" 
    fi 
done 

आप अपने निर्देशिका में डाल दिया है और इसे चलाने के लिए और यह विस्तार

संबंधित मुद्दे

 संबंधित मुद्दे