cpコマンドでコピーするファイルをどのようにテストできますか?

cpコマンドでコピーするファイルをどのようにテストできますか?

DIRECTORYBに存在しないDIRECTORYのすべてのファイルをコピーする簡単なスクリプトを作成しています。 cpコマンドを使用してこれを行います。

cp -u DIRECTORYA/* DIRECTORYB

また、私が望むのは、コピーされたファイルのリストを管理者に電子メールで送信することです。

したがって、理想的には、上記のコマンドを実行する前にコピーするファイルをインポートし、後で電子メールを作成するときに使用できるように変数に保存したいと思います。

誰もが正しい方向に私を指すことができますか? grepを試してみましたが、cpコマンドではこれを実行できないと思いますか?

答え1

cpアクションを取らないと、GNUが何をするのか知りたいのなら、GNUは役に立たないようです。変更されたファイルを記録するには、次の-vオプションを使用できます。

cp -puv DIRECTORYA/* DIRECTORYB >copy.log

cpあなたはそれを使用することができます同期、はるかに強力で安価な組み込みシステムを除くほとんどすべての場所に設置できます(基本的に存在しなくても設置が簡単です)。

rsync -aunv DIRECTORYA/* DIRECTORYB >what-would-be-done.txt

または

rsync -auv DIRECTORYA/* DIRECTORYB >copy.log

答え2

~によるとマニュアルページ

-u--update
コピーした場合のみ源泉ファイルは最新ターゲットファイルよりもターゲットファイル失われた

これは2つのテストを組み合わせた機能で、そのうちの1つはスクリプトで簡単に実装できます(失われた)と少し作業が必要なもの(最新)。commdiffおよびを使用して、必要な内容を報告するスクリプトを作成できますtest

標準cpユーティリティのどれもドライコピー操作機能を提供しません。提案されているように、rsync汎用ユーティリティを使用してこれを行う方法は次のとおりです。もちろん、rsync単にコピーするよりも多くの基準に基づいてコピーするためによく使用されます。最新または失われた(ファイルサイズやタイムスタンプも使用されます)が、単にすることで縮小できますcp -u

非標準ユーティリティの場合、copy私が1980年代後半に書いたユーティリティがあります(もちろん今日でもまだ使用されています)。make私が追加した最初のオプションがあったので、おそらくそのユーティリティからインスピレーションを得たでしょう-n

与えられた例では、次のように使用されます。

$ copy -nvU DIRECTORYA/* DIRECTORYB
** copy DIRECTORYA/foo to DIRECTORYB/foo
** 1 file would be copied, 616 bytes

追加資料:

  • copy - ファイル/ディレクトリコピーユーティリティ

    -n ファイルの実際の作成または変更を無効にし(詳細の程度に応じて)、そのファイルの効果を表示します。 copy 注文があるでしょう。
    -u ファイルはサイズや変更日が異なる場合にのみコピーされ、リンクテキストが異なる場合にのみリンクされます。
    -U ターゲットよりも最新のファイルまたはターゲットに存在しないファイルのみがコピーされます。

  • 次の変更ログエントリ1988年8月:

    1988-08-16    
            * src/copy/src/copy.c: "-d" および "-n" オプションが追加されました。
    

答え3

を実行するにはcp foo*bar whateverを実行しますecho foo*bar whatever

答え4

代わりにrsyncを試してください。 Rsyncはローカルコピーで非常にうまく動作し、15個の数のセルなしで多くのオプションを探すことで、確実に望むことができます。

rsync -avun DIRECTORYA/ DIRECTORYB

これから行われるすべてのことをあなたに見せてください。

rsync -avu DIRECTORYA/ DIRECTORYB

そうするでしょう。

関連情報