指定された外部HDDマウントでシェルスクリプトを実行する


1

外付けHDDにいくつかのファイルを保管していますが、接続せずに現在何が入っているかを知りたいと思っています。

このコマンドを修正して、MBDに接続したときに、iCloudドライブにアップロードされたHDD上のフォルダーのツリーのような構造を持つ.txtファイルを取得しました。

これは、.shとして保存した編集済みのコマンドで、ファイルをデスクトップに保存しています。

ls -R /Volumes/2TB/ sed -e '/^[^:]*$/d' -e 's/://' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/' > /Volumes/SSD/Users/V/Desktop/File.txt

これまでのところ、スクリプトを実行するショートカットをBTTで作成しましたが、そのHDDを接続するときに実行したいです。

誰かが、StartOnMountキーでlaunchdを作成できると提案しました。問題は、このスレッドから理解している限り、指定されたボリュームでセットアップすることは不可能です。

何か案は?


1
しかし、ディスクがマウントされるたびにこのスクリプトを実行する際の問題は何ですか?特定のディスクがマウントされているかどうかを確認するスクリプトを作成できます。マウントされていない場合は、終了します。
マテウスシュロセク16

それではどうしますか?端末コマンドなどに関しては、私は専門家ではありません
。– lavventura

1
投稿を編集して、スクリプトを見せてください。
fd0

コマンドで私の質問を更新しました
-lavventura

この行を次のようにラップしますif [ -d "/Volumes/2TB" ]; then (...) fi。これにより、2TBボリュームがマウントされている場合にのみコードが実行されます。
マテウスシュロセク16

回答:


1

この例では、の出力dfがパイプされgrepて、ハードディスクマウントポイントに一致するように見え/Volumes/2TBます。の終了ステータスはgrep、条件の結果を決定し!、ロジックを逆にします。

if ! df | grep -q '\/Volumes\/2TB$'
then 
    exit 0
fi

これは、grep一致しない場合は/Volumes/2TBスクリプトを終了するという文です。

このようなスクリプトを作成して、すべてをまとめます。

#!/bin/sh
#
#
if ! df | grep -q '\/Volumes\/2TB$'
then 
    exit 0
fi

ls -R /Volumes/2TB/ |
    sed -e '/^[^:]*$/d' \
        -e 's/://' \
        -e 's/[^-][^\/]*\//--/g' \
        -e 's/^/ /' \
        -e 's/-/|/' >/Volumes/SSD/Users/V/Desktop/File.txt 

ありがとうございます、説明どおりに動作します:)私はlaunchdエージェントを介してキー「StartOnMount」で実行しています。
-lavventura
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.