adbコマンドを用いて、MacからAndroidに音楽ファイルを転送するシェルスクリプト

[主題]
adbコマンドを用いて、MacからAndroidに音楽ファイルを転送するシェルスクリプトを作成したので、紹介したい。

[背景]
筆者はこの記事で、adbコマンドを用いて、MacからAndroidに音楽ファイルを転送する方法を説明した。記事は、ややマニアックな内容だった。
そこで、筆者自身、もっと手軽に使える方法はないかと考え、adbコマンド実行の前提となる、MacとAndroid端末の接続操作さえ済んでいれば使えるシェルスクリプトを作成した。

[環境]
参考までに、筆者の環境を記載しておく
MacBook Air 2023 15.3inch(Apple Silicon Mac, M2)
macOS Sonoma 14.7.1
Xcode 16.1
CommandLine Tools for Xcode 16.1.0.0.1

Android Debug Bridge version 1.0.41
Version 35.0.2-12147458

[前提条件]
このスクリプトは、Android端末の外部SDカードに、音楽ファイルを転送する。SDカード以外の場所に音楽ファイルを置きたい場合には、利用できない。

[スクリプト]
以下が、adbコマンドを用いて、MacからAndroidに音楽ファイルを転送するシェルスクリプトである。

  1. スクリプトの準備
    以下の内容をコピーし、send_music_to_android.bashというファイル名でデスクトップに保存する。スクリプトはこちらからダウンロードすることもできる。ダウンロードした場合、ファイル名拡張子が「txt」になっているので、これを除去する。なお、両者とも、スクリプトには実行権を付与すること。

    #!/bin/bash
    # 
    # MacからAndroidスマフォに音楽ファイルを転送するシェルスクリプト
    # 要 Perl(Macデフォルト), adb, USB/ワイヤレスデバッグ設定
    # 
    # © 2024.10.13 桃源老師
    # Modified 2024.10.19 桃源老師
    # 1.adbコマンド存在チェックの追加
    # 2.adbコマンド実行準備チェックの追加
    # 3.スクリプト実行キャンセルをできるようにした
    
    # 必要なコマンド(adb)の存在チェック
    # https://qiita.com/8ayac/items/b6b6f0a385d08659316b
    if !(type "adb" > /dev/null 2>&1); then
    	echo "adbが見つかりません"
    	echo ""
    	exit 1
    fi
    
    # ADBコマンド実行準備の確認
    ADBDEVICES=`adb devices | grep -v daemon | grep -v List`
    if [ "$ADBDEVICES" == "" ]; then
    echo "ADBコマンド実行準備ができていません。正しく設定してください。"
    echo ""
    exit 1
    fi
    
    # readコマンドを無限ループさせて、y/n/cの入力待ちにする
    # 新規アーティストの場合は、アーティストフォルダを転送する準備をする
    # 既存アーティストの場合は、アルバムフォルダを転送する準備をする
    # cの場合はキャンセル
    while : 
    do
    	read -p "新規アーティストですか?(y/n/c):" YNC
    	if [ "$YNC" = "y" ]; then
    	 	read -p "アーティスト名を入力してください:" ARTIST
    	 	MACPATH="$HOME/Music/ミュージック/Media.localized/Music/"
    	 	break
    	 elif [ "$YNC" = "n" ]; then
    	 	read -p "アーティスト名を入力してください:" ARTIST
    		read -p "アルバム名を入力してください:" ALBUM
    	 	MACPATH="$HOME/Music/ミュージック/Media.localized/Music/$ARTIST"
    	 	break
    	 elif [ "$YNC" = "c" ]; then
    	 	exit 0
    	 else
    	 	echo "入力が不正です。キーボードでy, n, cを入力してください。"
        	echo ""
    	fi
    done
    
    # Mac側音楽ファイルパス設定(ダブルクオートでエスケープ)
    # https://zenn.dev/bryutus/articles/bash-quotation-marks
    cd "$MACPATH"
    
    # Android側SDカード名を取得(ここでPerlが使われる)
    # https://android.stackexchange.com/questions/215796/cd-into-the-external-sd-card-directory-using-adb-shell
    SDCARD_NAME=`adb shell sm list-volumes public | perl -lane 'print $F[-1]'`
    # echo $SDCARD_NAME
    
    # Android側への音楽ファイルの転送
    # adb shell mkdirは不可能。
    # トリックとして、(中身のある)フォルダ毎ならば転送できる
    # https://stackoverflow.com/questions/13373489/adb-shell-command-mkdir-for-creating-a-directory
    # $YNが「y」の時は、新規アーティストなので、アーティストフォルダを転送
    if [ "$YNC" = "y" ]; then
    	adb push "$ARTIST" /storage/$SDCARD_NAME/Music
    # $YNが「n」の時は、既存アーティストなので、アルバムフォルダを転送
    else
    	adb push "$ALBUM" /storage/$SDCARD_NAME/Music/"$ARTIST"
    fi
    
    exit 0
  2. ファイル名拡張子の除去
    スクリプトをダウンロードした場合、ファイル名拡張子の除去が必要である。ターミナル.appを用いるならば、以下の操作を行う。もちろん、Finderを用いても構わない。

    cd ${HOME}/Desktop
    mv send_music_to_android.bash.txt send_music_to_android.bash
  3. スクリプト実行権の付与
    ターミナル.appを用いて、以下の操作を行う。

    cd ${HOME}/Desktop
    chmod +x send_music_to_android.bash
  4. スクリプトの説明
    コードそのものより多いコメントを参照されたい。さらなる質問等は記事のコメントにて受け付ける。

使い方

  1. MacとAndroid端末を接続する
    Android側でUSBデバッグを設定する。またはワイヤレスデバッグを設定する。

  2. スクリプトの起動
    ここでは、スクリプトがデスクトップにあるものとして話を進める。

    cd ${HOME}/Desktop
    ./send_music_to_android.bash
  3. 新規アーティストの場合
    新規アーティスト、すなわち、まだAndroid端末側に収録されていないアーティストの場合、次のような動作になる。

    roushinoMacBook-Air:Desktop roushi$ ./send_music_to_android.bash 
    新規アーティストですか?(y/n/c):y
    アーティスト名を入力してください:Ben Webster
    Ben Webster/: 27 files pushed, 0 skipp...16.0 MB/s (198141847 bytes in 11.798s)
    roushinoMacBook-Air:Desktop roushi$
  4. 既存アーティストの場合
    既にAndroid端末側に収録されているアーティストで、アルバムを追加する場合、次のような動作となる。

    roushinoMacBook-Air:Desktop roushi$ ./send_music_to_android.bash 
    新規アーティストですか?(y/n/c):n
    アーティスト名を入力してください:Ben Webster 
    アルバム名を入力してください:In Norway
    In Norway/: 11 files pushed, 0 skipped. 18.1 MB/s (106542145 bytes in 5.609s)
    roushinoMacBook-Air:Desktop roushi$

以上。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL