2017-07-19 3 views
-1

私は自分の携帯電話のフォルダから自分のMacのローカルフォルダにコピープロセスを自動化して、電話でオリジナルを削除したシェルスクリプトを持っていました。以前私は、私は私のスクリプトを実行したときに今日、私は誤って自分の携帯電話にプラグインするのを忘れ、また、その後の私の驚きに私のローカルフォルダ内のすべての画像ファイルが同様に削除されたボリュームがMac OSのシェルスクリプトにマウントされているかどうかを確認する最善の方法は?

cd /Users/foo/Phone\ Backups/Phone\ One/Pictures 
echo "Meta info of the picture files in the local folder before backup" >> /Users/foo/Documents/preBackup.txt 
find . -exec stat -c " %n size %s bytes; LMT %y; CT %w; LAT %x; LSC %z; %F; Owned by: %U" {} \; | tee -a /Users/foo/Documents/preBackup.txt 


cp -a /Volumes/Foo\'s\ Phone\ One\ Pictures/. /Users/foo/Phone\ Backups/Phone\ One/Pictures 
echo "Backup complete. Delete all records on the phone." 
cd /Volumes/Foo\'s\ Phone\ One\ Pictures 
find . ! -type d -delete 
echo "Deleted." 

を書きました。私はそれが私の電話の画像フォルダを見つけられなかったからだと思うので、 "find!-type d -delete"というコマンドを実行したときにローカルフォルダに残っていた。

これで、Mac OSのシェルスクリプトにボリュームがマウントされているかどうかを確認し、ボリュームの名前にスペースがあるかどうかを確認するにはどうすればよいですか?

ありがとうございます。ボリュームがマウントされているかどうかを確認するには

+0

「df」コマンドで開始するのに最適な場所。 –

+0

ボリュームの名前に '' 'とスペースがあるのを知ることはなぜ重要ですか?あなたのコードスニペットに必要な部分は何も表示されません。 – janos

答えて

0

、 あなたは、単にたとえば、ディレクトリが存在するかどうかを確認し[ -d ... ]コマンドを使用することができます。

[ -d "/Users/foo/Phone Backups/Phone One/Pictures" ] || exit 1 

をしかし、それは、ここでの最大の懸念はありません。 コマンドの終了コードを確認しないと、実際の問題は であり、例のように簡単にデータが失われる可能性があります。

特に、ソースファイルを削除するなど危険な場合は、コマンドの終了コード、 を確認する必要があります。 この例では、ボリュームがマウントされていないときにcpコマンドが失敗し、 をチェックして処理できました。例えば

:あなたが失敗する可能性が多くのコマンドを持っているよう

fatal() { 
    echo fatal: "[email protected]" 
    exit 1 
} 

cd "/Users/foo/Phone Backups/Phone One/Pictures" || fatal 'Could not cd into backups dir' 

これは、少し退屈得ることができます。 すべてcdcpfindrmは失敗する可能性があります。

もう1つの方法は、プログラムが失敗したときに自動的に終了するか、未定義の変数を参照するなどの不審なことが起こるように、シェルにいくつかのフラグを設定することです。 だけでも、途中で障害が発生した場合には、スクリプトの先頭に以下を追加し、それを実行するために、より安全になります。

set -euo pipefail 
0

その非常に一般的で危険な問題だけでなく、ボリュームをマウントするためには。

破壊的な作業を開始するときは、正しいフォルダ内にあるかどうかを常に確認してください。他の場合はrm -frがあなたの日を壊す可能性があります。

簡単なスクリプトの例:ここでは

#!/bin/bash 
# Simple check to see wetter we are in the correct folder 
if [ $(pwd) == '/home/foo/files' ]; then 
    echo "I'm in the correct folder" 
    # do what you need to do... 
else 
    echo "This folder [$(pwd)] is NOT the correct folder! Abort..." 
fi 
0
limit="some limit" 
df /User 2> /dev/null | awk -v limit=$limit '$1 != "Filesystem" { if ($4 < limit) { print "There is not enough space";exit 1 } }' 
if [[ $0 != "1" ]] 
then 
     do stuff here..... 
fi 

我々はに対してファイルシステム領域をチェックするために制限を設定し、我々は制限セットを利用awkの通過/ユーザー配管のdfコマンドを実行します。マウントされたファイルシステムがない場合、コマンドの戻り状況は1になります。十分なスペースがない場合、awkは1を返します。戻り状況が1でない場合に限り、処理を続行できます。

関連する問題