質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
bash

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

シェル

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

Q&A

解決済

2回答

11349閲覧

シェルスクリプトを実行したらmkdirのエラーが出ました

anpapa

総合スコア16

bash

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

シェル

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

0グッド

0クリップ

投稿2017/03/18 04:18

編集2017/03/18 04:44

ファイル名のパターンからフォルダーに配置していくシェルスクリプトを作りたいと思い以下のようなものを書きました。
実行すればカレントディレクトリにあるmp3ファイルを検索し条件に応じて各フォルダに移動していくものです。移動先のフォルダがなければその都度作成します。

しかし、実行すると以下のようなエラーメッセージが出てしまい、原因がわかりません。対策として、mkdirの後ろを""で囲んでみたりしましたが同じエラーが出ました。もしよろしければ解決するために皆様の知恵をお貸しいただけないでしょうか。
#コード

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 else mkdir /Users/hoge/radio/file/tmp/${fartist}/${falbum}/ mv $f /Users/hoge/radio/file/tmp/${fartist}/${falbum}/ fi done

#エラーメッセージ

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

mkdir /Users/hoge/radio/file/tmp/${fartist}の位置がおかしいです。

Bash

1find . -name "*.mp3" -type f | while read -r f;do 2fname="${f%.*}" 3fname="${fname##*@}" 4falbum="${fname%_*}" 5fartist="${fname#*_}" 6 7if [ -e /Users/hoge/radio/file/tmp/${fartist} ]; then 8 if [ -e /Users/hoge/radio/file/tmp/${fartist}/${falbum} ]; then 9 mv $f /Users/hoge/radio/file/tmp/${fartist}/${falbum}/ 10 else 11 mkdir /Users/hoge/radio/file/tmp/${fartist}/${falbum} 12 mv $f /Users/hoge/radio/file/tmp/${fartist}/${falbum}/ 13 fi 14else 15 mkdir /Users/hoge/radio/file/tmp/${fartist} 16 mkdir /Users/hoge/radio/file/tmp/${fartist}/${falbum}/ 17 mv $f /Users/hoge/radio/file/tmp/${fartist}/${falbum}/ 18fi 19done

もっとシンプルには、これでいいです。

Bash

1find . -name "*.mp3" -type f | while read -r f;do 2fname="${f%.*}" 3fname="${fname##*@}" 4falbum="${fname%_*}" 5fartist="${fname#*_}" 6 7mkdir -p /Users/hoge/radio/file/tmp/${fartist}/${falbum}/ 8mv $f /Users/hoge/radio/file/tmp/${fartist}/${falbum}/ 9done

投稿2017/03/18 04:54

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

anpapa

2017/03/18 07:41

回答していただきどうもありがとうございます。 このようにpオプションを指定すると、サブディレクトリごと作成でき、さらに既にディレクトリが存在する場合は何もしない、と私がやりたかったことにぴったりの結果が得られました、ありがとうございました。
guest

0

[ missing ]となっていますが、閉じる]の前にはスペースが必要です。まずはそれを調整して確認してみて下さい。

投稿2017/03/18 04:32

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

anpapa

2017/03/18 04:43

回答していただきどうもありがとうございます、[]のところにはスペースを入れる必要があることを知りませんでした。スペースを追加したところ一部のエラーが解決されました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問