2016-03-22 15 views
0

belirli dize konuma bir numara taşıma nedenle çıktı dosyalarını olmadıklarını TEST.doc, TEST.doc1, TEST.doc12, vb, ancak bunun yerine TEST.doc, TEST_1.doc, TEST_2.doc, Daha spesifik olarak, bilinen .extension'dan hemen önce (txt|rtf|pages|numbers|keynote|doc|docx|xls|ppt|pdf).Bash -. Ben senaryoyu nasıl değiştirebileceğinizi anlamaya çalışıyorum

Bunu nasıl yapabilirim? İşte

komut

#!/bin/bash 

rename_files() { 
    title="${1##*${2} - }" 
    for filename in "$1/"*.*; do 
    case "${filename##*.}" in 
    txt|rtf|pages|numbers|keynote|doc|docx|xls|ppt|pdf) 
     mkdir -p -m 777 "/Users/Desktop/Documents Share/Downloaded/${title}" 
     new_path="/Users/Desktop/Documents Share/Downloaded/${title}/${title}.${filename##*.}" 
     let "iters=1" 
     while [ -f "$new_path" ] ; do 
      new_path=$new_path"$iters" 
      let "iters++" 
     done 
     echo "moving $filename -> $new_path" 
     mv "${filename}" "${new_path}" 
     ;; 
    esac 
    done 
} 

rename_category() { 
    for path in "/Users/Desktop/Documents Share/Downloads/${1}"*; do 
    rename_files "$path" "$1" 
    done 
} 

rename_category DOC 

DÜZENLEME:

fromdir="/Users/Desktop/Downloads/" 
todir="/Users/Desktop/Documents Share/Downloaded/${2}/" 

rename_files() { 
    title="${1##*${2} - }" 
    let "iters=0" 
    for filename in "$1/"*.*; do 
    case "${filename##*.}" in txt|rtf|pages|numbers|keynote|doc|docx|xls|ppt|pdf) 
     new_path="${todir}/${2}/${title}.${filename##*.}" 
      new_path=$new_path # removed "$iters" 
      let "iters++" 
      # extract $path without dot + extension 
      new_path_basename=${new_path%*.*}; 
      # Extract extension from $path 
      ext=${new_path##*.}; 
      echo "moving $filename -> ${new_path_basename}_${iters}.${ext}" 
      # Add ${iters} before extension 
      mv "${filename}" "${new_path_basename}_${iters}.${ext}" 
     ;; 
    esac 
    done 
} 

rename_category() { 
    for path in "${fromdir}${1}"*; do 
    rename_files "$path" "$1" 
    done 
} 

rename_category DOC 
rename_category PRJ 

önce:

/Users/Desktop/Downloads/DOC - TESTDOC/AFile.doc 
             /AnotherFile.doc 

/Users/Desktop/Downloads/PRJ - TESTPRJ/AFile.pdf 
             /AnotherFile.pdf 

sonra:

/Users/Desktop/Documents Share/Downloaded/DOC/TESTDOC_1.doc 
              /TESTDOC_2.doc 

/Users/Desktop/Documents Share/Downloaded/PRJ/TESTPRJ_1.pdf 
              /TESTPRJ_2.pdf 

EDIT2:

iki deney dosya vardır: big_buck_bunny_240p_50mb.mp4 ve big_buck_bunny_240p_50mb copy.mp4

çıktı günlük

sh Script.sh 

moving /Users/Desktop/Downloads/MOV - TEST/big_buck_bunny_240p_50mb copy.mp4 -> /Users/Desktop/Documents Share/Downloaded/MOV/TEST_1.mp4 

cp /Users/Desktop/Downloads/MOV - TEST/big_buck_bunny_240p_50mb copy.mp4 /Users/Desktop/Documents Share/Downloaded/MOV/TEST_1.mp4 

moving /Users/Desktop/Downloads/MOV - TEST/big_buck_bunny_240p_50mb.mp4 -> /Users/Desktop/Documents Share/Downloaded/MOV/TEST_2.mp4 

cp /Users/Desktop/Downloads/MOV - TEST/big_buck_bunny_240p_50mb.mp4 /Users/albertorapolla/Desktop/Documents Share/Downloaded/MOV/TEST_2.mp4 

EDIT3: script

Son güncelleme (değil "özel" bir)

#!/bin/bash 

fromdir="/Users/Desktop/Downloads/" 
todir="/Users/Desktop/Documents Share/Downloaded/" 

rename_files() { 
    title="${1##*${2} - }" 
    exttitle="${2}" 
    iters=0 
    numfiles=$(ls -l "$1/"*.* | wc -l) 
    for filename in "$1/"*.*; do 
     new_path="${todir}${title}/${title}.${filename##*.}" 
     iters=_$((++i)) 
     # extract $path without dot + extension 
     new_path_basename=${new_path%*.*}; 
     # Extract extension from $path 
     ext=${new_path##*.}; 
     if [ "$numfiles" -eq 1 ]; then 
      iters="" 
     fi 
     case "${filename##*.}" in txt|rtf|pages|numbers|keynote|doc|docx|xls|ppt|pdf) 
     mkdir -p -m 777 "${todir}${title}" 
     echo "moving $filename -> ${new_path_basename}${iters}.${ext}" 
     # Add ${iters} before extension 
     mv "${filename}" "${new_path_basename}${iters}.${ext}" 
     ;; 
     esac 
    done 
} 

rename_category() { 
    for path in "${fromdir}${1}"*; do 
    rename_files "$path" "$1" 
    done 
} 

rename_category DOC 

cevap

1

(comments komut vardır) bu deneyin:

rename_files() { 
    title="${1##*${2} - }" 
    exttitle="${2}" 
    iters=0 
    numfiles=$(ls -l "$1/"*.* | wc -l) 
    for filename in "$1/"*.*; do 
     new_path="${todir}${exttitle}/${title}.${filename##*.}" 
     iters=_$((++i)) 
     # extract $path without dot + extension 
     new_path_basename=${new_path%*.*}; 
     # Extract extension from $path 
     ext=${new_path##*.}; 
     if [ "$numfiles" -eq 1 ]; then 
      iters="" 
     fi 
     case "${filename##*.}" in txt|rtf|pages|numbers|keynote|doc|docx|xls|ppt|pdf) 
     mkdir -p -m 777 "${todir}${exttitle}" 
     echo "moving $filename -> ${new_path_basename}${iters}.${ext}" 
     # Add ${iters} before extension 
     mv "${filename}" "${new_path_basename}${iters}.${ext}" 
     ;; 
     esac 
    done 
} 

rename_category() { 
    for path in "${fromdir}${1}"*; do 
    rename_files "$path" "$1" 
    done 
} 

rename_category DOC 
+0

Aynı dosyanın üzerine görünüyor. Çıkış dosyası olarak şimdi sadece '/ Belgeler Paylaşım/İndirilen/TEST/TEST_1.doc' var, ancak çıktı günlüğü hareketli/Kullanıcılar/Masaüstü/Yüklemeler/DOC - TEST/Örnek-doc-file-100kb.doc ->/Kullanıcılar/Masaüstü/Belgeler Paylaş/İndirilenler/TEST/TEST.doc' 'hareketli/Kullanıcılar/Masaüstü/Yüklemeler/DOC - TEST/Örnek-doc-file-200kb.doc ->/Kullanıcılar/Masaüstü/Belgeler Share/İndirilenler/TEST/TEST.doc ' ' hareketli/Kullanıcılar/Masaüstü/Yüklemeler/DOC - TEST/Örnek-doc-dosya-500kb.doc ->/Kullanıcılar/Masaüstü/Belgeler Paylaş/İndirilen/TEST/TEST.doc'. – DylanDog

+0

Günlük mesajını ve 'while' bloğunu güncelledim. – SLePort

+0

Düzgün çalışmıyor. Sadece 'TEST' klasörü oluşturur. – DylanDog

İlgili konular