どのファイルがcpコマンドでコピーされるかをテストする方法は?


11

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

cp -u DIRECTORYA/* DIRECTORYB

また、コピーしたファイルを一覧表示するメールを管理者に送信します。

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

誰かが私を正しい方向に向けることができますか?私はgrepの使用を調査しましたが、これはcpコマンドで実行できないと思いますか?


1
多分私はあなたの質問を誤解しているかもしれませんが、-vフラグを使用して、コピーされたファイル名を印刷することはできませんか?これをファイルまたは変数に直接リダイレクトし、それを使用してメッセージを作成します。
ThibautRenaux 2015

さらに、このcpコマンドには--attributes-only、ファイルデータをコピーせず、ディレクトリとファイル構造のみをコピーできるオプションがあります。
Costas

申し訳ありませんが、スクリプトを作成するのはかなり初めてです。-vフラグを使用する場合、ファイルではなく変数に出力するにはどうすればよいですか?
James

1
bashを使用していると仮定するとvariable=$(cp -v ...)、cpのstdoutをキャプチャします。gnu.org/software/bash/manual/html_node/Command-Substitution.htm
Gowtham

回答:


4

cpあなたが行動せずにそれが何をするかを見たいのであれば、GNU があなたを助けるものは何もないと思います。変更されたファイルをログに記録する場合は、次の-vオプションを使用できます。

cp -puv DIRECTORYA/* DIRECTORYB >copy.log

の代わりにcprsyncを使用できます。これは、はるかに強力であり、ローエンドの組み込みシステムを除くほぼすべての場所にインストールされます(デフォルトで存在しない場所に簡単にインストールできます)。

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

または

rsync -auv DIRECTORYA/* DIRECTORYB >copy.log

2

を実行したい場合はcp foo*bar whateverecho foo*bar whatever代わりに実行してください。


しかし、OPは実行cp -uを望んでおり、cpの模擬的なオプションを探しています。
Arkadiusz Drabczyk 2015

2

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

-uソースファイルが宛先ファイルより新しい場合、または宛先ファイルが欠落している場合に のみコピーします--update

これは、2つのテストを組み合わせた機能です。1つはスクリプトに実装するのが簡単で(欠落)、もう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

参考文献:

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

    -n ファイルの実際の作成または変更を無効にし、(詳細レベルに応じて)copy コマンドの効果を示し ます。
    -u サイズまたは変更日が異なる場合にのみファイルをコピーし、リンクテキストが異なる場合にのみリンクします。
    -U コピー先よりも新しいファイル、またはコピー先に存在しないファイルのみをコピーします。

  • 1988年8月の changelogエントリ:

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

0

diffコマンドを使用できます。毎日、いくつかのバックアップファイルをコピーするジョブがあります。すべてのファイルがコピーされたかどうかを確認する必要がある場合があります。構文は次のとおりです。

diff /file1/ /file2/

もちろん、それらをコピーしたい場合は、以下を使用します。

cp -u /file1/* /file2

0

代わりにrsyncの使用を検討してください。Rsyncはローカルコピーで完全に機能し、15兆に及ぶオプションを試してみると、確実に思い通りのことができます。

rsync -avun DIRECTORYA/ DIRECTORYB

行われるすべてを表示します。

rsync -avu DIRECTORYA/ DIRECTORYB

それを行います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.