webcam.jpg
呼び出されたファイルを日付でエンコードされたサブディレクトリにコピーすることも処理できる短いシェルスクリプトを作成しようとしています。ディレクトリがまだ存在しない場合は、自動的にディレクトリを作成するため、rsyncを使用します。
以下を使用すると、すべてがうまく機能します。
rsync -a webcam.jpg ./$(date +%Y-%m-%d)/$(date +%Y-%m-%d_%H-%M).jpg
しかし、ディレクトリに深く入ると、rsyncでエラーが発生し始めますが、その理由は実際にはわかりません。私は次のように入力しています:
rsync -a webcam.jpg ./saved_images/$(date +%Y-%m-%d)/$(date +%Y-%m-%d_%H-%M).jpg
私の結果は次のとおりです
rsync: change_dir#3 "/var/www/tmp/test//./saved_images/2013-07-07" failed: No such file or directory (2)
rsync error: errors selecting input/output files, dirs (code 3) at main.c(677) [Receiver=3.0.9]
rsync: connection unexpectedly closed (9 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
test//./saved_images
最初の行に関連するエラーが表示されますが、最初にrsyncがこのディレクトリにアクセスしようとしたのはなぜですか?質問がありますかtest/saved_images/
?
ベストアンサー1
良い/var/www/tmp/test//./saved_images/2013-07-07
と同じです/var/www/tmp/test/saved_images/2013-07-07
。
Double は/
無視されます。入力でき、ls ////
と同じですls /
。
ポイントは.
それがあるディレクトリと同じです。 soは、ディレクトリを指すのとls /.
同じ出力を表示します。ls /
/var/www/tmp/test/.
/var/www/tmp/test/
したがってrsync
、あなたの場合は、そのディレクトリがある現在のディレクトリを取得してくださいvar/www/tmp/test/
(少なくともパスがaで始まる場合.
)。次に、追加のエントリを追加して、そのパス/
に確実に追加されたエンディングがあることを確認します/
。最後のステップでは、ここに提供した部分を追加します。./saved_images/$(date +%Y-%m-%d)/$(date +%Y-%m-%d_%H-%M).jpg
表示されるエラーは、ディレクトリが/var/www/tmp/test/saved_images/
存在せず、ディレクトリrsync
のみが作成されるため生成されないことです。rsync
編集する
おそらく問題のためにスクリプトを使用する必要があります。
today_dir=$(date +%Y-%m-%d)
mkdir -p ./$today_dir/
cp webcam.jpg ./$today_dir/$(date +%Y-%m-%d_%H-%M).jpg