
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つはスクリプトで簡単に実装できます(失われた)と少し作業が必要なもの(最新)。comm
、diff
およびを使用して、必要な内容を報告するスクリプトを作成できます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月:
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
そうするでしょう。