0

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

フォルダーをコピーすると削除するという問題があります。フォルダーの内容が空になることもあれば、フォルダー自体が残ることもあれば、何も起こらないこともあります。rsync のコピーが完了した後にフォルダーを削除するより良い方法はありますか? 私はライブテレビのバッファフォルダを除外しようとしていましたが、実際には、必要に応じて結果を出さずに吹き飛ばすことができます.

#!/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
4

1 に答える 1

2

これを行うにはおそらく多くの方法がありますが、私は次のようにします。

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

構文は、前の&&コマンドが正常に終了した場合にのみ実行することを意味し、rm -rfファイルが存在する場合でも、ディレクトリの削除を強制します。

rsync オプション --remove-source-files を試すこともできますが、それではディレクトリが残ると思うので、後でクリーンアップする必要があります。

上記のコメントで述べたように、ECHO のような大文字のコマンドは避けたいと考えています。

終了ステータスの詳細や、bash を使用する際のその他の優れたヒントについては、いつもhttp://tldp.org/LDP/abs/html/exit-status.htmlに戻ってしまいます。

于 2010-03-22T22:36:27.033 に答える