成功したコピー(Mac OSX)の後、Bashでフォルダを削除するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2495967

質問

私は最近、最初のBashスクリプトを作成しましたが、それが操作を完璧にするのに問題があります。特定のフォルダーを1つのローカルドライブからネットワークドライブにコピーしようとしています。

フォルダーがコピーされたら削除する問題があります。フォルダーにコンテンツが空になる場合がありますが、フォルダー自体が残っています。 RSYNCがコピーが完了した後、フォルダを削除しようとするより良い方法はありますか?私はライブTVバッファーフォルダーを除外しようとしていましたが、実際には、必要に応じて結果なく吹き飛ばすことができます。

#!/bin/bash

network="CBS"
useracct="tvcapture"
thedate=$(date "+%m%d%Y")
folderToBeMoved="/users/$useracct/Documents"
newfoldername="/Volumes/Media/TV/$network/$thedate"

ECHO "Network is $network"
ECHO "date is $thedate"
ECHO "source is $folderToBeMoved"
ECHO "dest is $newfoldername"

mkdir $newfoldername
rsync -av $folderToBeMoved/"EyeTV Archive"/*.eyetv $newfoldername --exclude="Live TV Buffer.eyetv"

# this fails when there is more than one *.eyetv folder
if [ -d $newfoldername/*.eyetv ]; 
then 
#this deletes the contents of the directories
find $folderToBeMoved/"EyeTV Archive"/*.eyetv \( ! -path $folderToBeMoved/"EyeTV Archive"/"Live TV Buffer.eyetv" \) -delete
#remove empty directory
find $folderToBeMoved/"EyeTV Archive"/*.eyetv -type d -exec rmdir {} \;
fi
役に立ちましたか?

解決

おそらくこれを行う方法はたくさんありますが、私は一緒に行きます:

rsync -av $folderToBeMoved/"EyeTV Archive"/*.eyetv $newfoldername --exclude="Live TV Buffer.eyetv" && rm -rf $folderToBeMoved

&& 構文とは、これが以前のコマンドが正常に終了したことのみを行うことを意味し、 rm -rf ディレクトリの削除を強制します。たとえファイルが含まれていても。

RSYNCオプション(Remove-Source-Files)を試すこともできますが、ディレクトリが残ると思います。そのため、後でクリーンアップする必要があります。

また、上記のコメントで述べたように、エコーのような大文字のコマンドを避けたいと思うので、多くの場所で物事が壊れます。

Exitステータスの詳細やBashを使用する際の他の多くの素晴らしいヒントについては、私は常に戻ります http://tldp.org/ldp/abs/html/exit-status.html.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top