2016-03-22 9 views
0

特定の文字列の場所に番号を移動しますので、出力ファイルがないことをTEST.docTEST.doc1TEST.doc12、電気ショック療法、代わりにTEST.docTEST_1.docTEST_2.doc、より簡単には、具体的に知られている直前の.extension。(txt|rtf|pages|numbers|keynote|doc|docx|xls|ppt|pdf)。バッシュ - 。私は、スクリプトを変更することができます方法を理解しようとしてい

どうすればいいですか?前

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 

:ここ

スクリプト

#!/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 

EDIT

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

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

後:

/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

2つのテストファイルがあります。 big_buck_bunny_240p_50mb.mp4big_buck_bunny_240p_50mb copy.mp4

出力ログ

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

スクリプトの最終更新は(ありません「特別」なもの)

#!/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 

答えて

1

(コメントはスクリプトである)、これを試してみてください:

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

同じファイルを上書きするようです。出力ファイルとしては '/ Documents Share/Downloaded/TEST/TEST_1.doc'しかありませんが、出力ログは' 'move/Users/Desktop/Downloads/DOC-TEST/Sample-doc-file-100kb.doc - >/移動/ユーザー/デスクトップ/ダウンロード/ DOC-TEST /サンプル-doc-file-200kb.doc - >/Users/Desktop/Documents Share/Downloaded/TEST/TEST/TEST/TEST/TEST/TEST/TEST/TEST/TEST/TEST/TEST/TEST/TEST/TEST/TEST/TEST/TEST/TEST/TEST/TEST/TEST/TEST/TEST/TEST。 – DylanDog

+0

ログメッセージと 'while'ブロックを更新しました。 – SLePort

+0

正常に動作しません。 'TEST'フォルダのみを作成します。 – DylanDog

関連する問題