私は、DIRECTORYBに存在しないすべてのファイルをDIRECTORYAからコピーする簡単なスクリプトを作成しています。私はこれをcpコマンドを使用して実行しています。
cp -u DIRECTORYA/* DIRECTORYB
また、コピーしたファイルを一覧表示する電子メールを管理者に送信します。
したがって、理想的には、上記のコマンドを実行する前に、コピーされるファイルを取得して、後で電子メールメッセージを作成するときに使用できるように変数に保存します。
誰かが私を正しい方向に向けることができますか?私はgrepを使用して調べましたが、これはcpコマンドで実行できないと思いますか?
GNU cp
は、動作せずに何が行われるかを確認したい場合に役立つ情報はないと思います。変更されたファイルをログに記録するには、 -v
オプション:
cp -puv DIRECTORYA/* DIRECTORYB >copy.log
cp
の代わりに rsync を使用できます。これははるかに強力であり、ローエンドの組み込みシステムを除くほぼすべての場所にインストールされます(そして、存在しない場所に簡単にインストールできます)デフォルト)。
rsync -aun DIRECTORYA/* DIRECTORYB >what-would-be-done.txt
または
rsync -auv DIRECTORYA/* DIRECTORYB >copy.log
manual page によれば、
-u
、--update
[〜#〜] source [〜#〜]ファイルがコピー先よりnewの場合にのみコピーファイルまたは宛先ファイルががない場合
これは2つのテストを組み合わせた機能です。1つはスクリプトに実装するのが簡単であり(missing)、もう1つは作業が必要です(newer )。 comm
、diff
およびtest
を使用して、必要なものを報告するスクリプトを作成できます。
標準のcp
ユーティリティには、コピー操作をドライランする機能はありません。提案されているように、rsync
は、一般的に利用可能なユーティリティでこれを行う方法です。もちろん、rsync
は通常、newerまたはmissing(ファイルサイズ)よりも多くの基準に基づいてコピーするために使用されますとタイムスタンプも使用されます)。ただし、cp -u
を実行するだけに減らすことができます。
非標準のユーティリティとして、1980年代後半に私が書いた(そしてもちろんまだ使用している)copy
ユーティリティがあります。私が追加した最初のオプションは-n
だったので、おそらくmake
ユーティリティに触発されました。
この例では、次のように使用されます。
$ copy -nvU DIRECTORYA/* DIRECTORYB
** copy DIRECTORYA/foo to DIRECTORYB/foo
** 1 file would be copied, 616 bytes
参考文献:
-n
は、ファイルの実際の作成または変更を無効にし、(詳細レベルに応じて)copy
コマンドの場合。-u
は、サイズまたは変更日が異なる場合にのみファイルをコピーし、リンクテキストが異なる場合にのみリンクします。-U
は、宛先よりも新しいファイル、または宛先に存在しないファイルのみをコピーします。
1988-08-16 * src/copy/src/copy.c:「-d」および「-n」オプションを追加。
cp foo*bar whatever
を実行したい場合は、代わりにecho foo*bar whatever
を実行してください。
Diffコマンドを使用できます。私は毎日いくつかのバックアップファイルをコピーする仕事をしています。すべてのファイルがコピーされたかどうかを確認する必要がある場合があります。構文は次のとおりです。
diff /file1/ /file2/
もちろん、それらをコピーしたい場合は、以下を使用します。
cp -u /file1/* /file2
代わりにrsyncの使用を検討してください。 Rsyncはローカルコピーで完全に機能し、15兆に及ぶオプションを試してみると、確実に思い通りのことができます。
rsync -avun DIRECTORYA/ DIRECTORYB
行われるすべてを表示し、
rsync -avu DIRECTORYA/ DIRECTORYB
それを行います。