質問編集履歴

2 []の前後にスペースを追加しました

anpapa

anpapa score 15

2017/03/18 13:44  投稿

シェルスクリプトを実行したらmkdirのエラーが出ました
ファイル名のパターンからフォルダーに配置していくシェルスクリプトを作りたいと思い以下のようなものを書きました。
実行すればカレントディレクトリにあるmp3ファイルを検索し条件に応じて各フォルダに移動していくものです。移動先のフォルダがなければその都度作成します。
しかし、実行すると以下のようなエラーメッセージが出てしまい、原因がわかりません。対策として、mkdirの後ろを""で囲んでみたりしましたが同じエラーが出ました。もしよろしければ解決するために皆様の知恵をお貸しいただけないでしょうか。
#コード
```/usr/bin/bash
find . -name "*.mp3" -type f | while read -r f;do
fname="${f%.*}"
fname="${fname##*@}"
falbum="${fname%_*}"
fartist="${fname#*_}"
if [ -e /Users/hoge/radio/file/tmp/${fartist}]; then
   if [ -e /Users/hoge/radio/file/tmp/${fartist}/${falbum}]; then
if [ -e /Users/hoge/radio/file/tmp/${fartist} ]; then
   if [ -e /Users/hoge/radio/file/tmp/${fartist}/${falbum} ]; then
       mv $f /Users/hoge/radio/file/tmp/${fartist}/${falbum}/
   else
       mkdir /Users/hoge/radio/file/tmp/${fartist}
       mkdir /Users/hoge/radio/file/tmp/${fartist}/${falbum}
       mv $f /Users/hoge/radio/file/tmp/${fartist}/${falbum}/
   fi
else
   mkdir /Users/hoge/radio/file/tmp/${fartist}/${falbum}/
   mv $f /Users/hoge/radio/file/tmp/${fartist}/${falbum}/
fi
done
```
#エラーメッセージ
```
./Foldering.sh  
./Foldering.sh: line 11: [: missing `]'  
mkdir: /Users/hoge/radio/file/tmp/hoge: No such file or directory
mv: rename ./19900101@hoge_hoge.flv to /Users/hoge/radio/file/tmp/hoge/hoge/: No such file or directory
```
  • bash

    1249 questions

    bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

  • シェル

    427 questions

    シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

1 コードの部分を灰色にして見やすくしました

anpapa

anpapa score 15

2017/03/18 13:22  投稿

シェルスクリプトを実行したらmkdirのエラーが出ました
ファイル名のパターンからフォルダーに配置していくシェルスクリプトを作りたいと思い以下のようなものを書きました。
実行すればカレントディレクトリにあるmp3ファイルを検索し条件に応じて各フォルダに移動していくものです。移動先のフォルダがなければその都度作成します。
しかし、実行すると以下のようなエラーメッセージが出てしまい、原因がわかりません。対策として、mkdirの後ろを""で囲んでみたりしましたが同じエラーが出ました。もしよろしければ解決するために皆様の知恵をお貸しいただけないでしょうか。
#コード
/usr/bin/bash
```/usr/bin/bash
find . -name "*.mp3" -type f | while read -r f;do
fname="${f%.*}"
fname="${fname##*@}"
falbum="${fname%_*}"
fartist="${fname#*_}"
if [ -e /Users/hoge/radio/file/tmp/${fartist}]; then
   ---if [ -e /Users/hoge/radio/file/tmp/${fartist}/${falbum}]; then
       ------mv $f /Users/hoge/radio/file/tmp/${fartist}/${falbum}/
   ---else
       ------mkdir /Users/hoge/radio/file/tmp/${fartist}
       ------mkdir /Users/hoge/radio/file/tmp/${fartist}/${falbum}
       ------mv $f /Users/hoge/radio/file/tmp/${fartist}/${falbum}/
   ---fi
   if [ -e /Users/hoge/radio/file/tmp/${fartist}/${falbum}]; then
       mv $f /Users/hoge/radio/file/tmp/${fartist}/${falbum}/
   else
       mkdir /Users/hoge/radio/file/tmp/${fartist}
       mkdir /Users/hoge/radio/file/tmp/${fartist}/${falbum}
       mv $f /Users/hoge/radio/file/tmp/${fartist}/${falbum}/
   fi
else
   ---mkdir /Users/hoge/radio/file/tmp/${fartist}/${falbum}/
   ---mv $f /Users/hoge/radio/file/tmp/${fartist}/${falbum}/
   mkdir /Users/hoge/radio/file/tmp/${fartist}/${falbum}/
   mv $f /Users/hoge/radio/file/tmp/${fartist}/${falbum}/
fi
done
```  
#エラーメッセージ
```  
./Foldering.sh
./Foldering.sh: line 11: [: missing `]'
mkdir: /Users/hoge/radio/file/tmp/hoge: No such file or directory
mv: rename ./19900101@hoge_hoge.flv to /Users/hoge/radio/file/tmp/hoge/hoge/: No such file or directory
mv: rename ./19900101@hoge_hoge.flv to /Users/hoge/radio/file/tmp/hoge/hoge/: No such file or directory
```
  • bash

    1249 questions

    bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

  • シェル

    427 questions

    シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る