再帰的な非上書きファイルコピー?


21

CoffeeScript / JavaScriptファイルを含む他のフォルダーの束を含むディレクトリを持っています。CoffeeScriptファイルを同じフォルダー構造を持つ新しいフォルダーにコンパイルすることができます。

私がやりたいのは、ソースフォルダー内のすべての* .jsファイルを宛先フォルダーに再帰的にコピーすることです。また、宛先フォルダーに既に存在するファイルを上書きしたくありません。これを達成する方法についての考えはありますか?

使用cp -n source/**.js desination/してみて、cp -Rn source/**.js desination/別の同様の質問を見てみましたが、機能していないようです。

これを達成する方法はありますか?


rsyncを調べましたか?
bonob 14

@bonobありません。私は一度か二度使ったが、リモートでファイルを取得するためだけに使った。
AlbertEngelB 14

回答:


25

rsyncを使用できます(ローカルコピーも行います)

rsync -r --ignore-existing --include=*/ --include=*.js --exclude=* source/ destination
  • -r ディレクトリに再帰するには、
  • --ignore-existing 宛先の既存のファイルを無視するには、
  • 平均フィルタ:、すべてのディレクトリを含め、すべての*の.jsファイルが含まれ、残りの部分を除外する。最初のインクルードが必要です。それ以外の場合、最終的な除外では、コンテンツがスキャンされる前にディレクトリも除外されます。includeexclude

最後に、-P進行状況--list-onlyを確認する-t場合、実際にコピーせずにコピーする内容を確認する場合、およびタイムスタンプを保持する場合にaを追加できます。


これは関係ありませんが、15年分のドキュメントをあるパーティションから別のパーティションに移動したときに、最近rsyncコマンドを学びました。自分のファイルがそこにあると確信してから、古いパーティションを消去して、そこに他のものを入れました。後で、すべてのタイムスタンプを失ったことに気付き、-tフラグを発見しました。私の苦痛を共有したかっただけです: '(


ハハ、これはうまくいきました! rsyncどうやら爆弾です。
AlbertEngelB 14

3
はい、ほとんどわかりませんが、あなたの質問に答えようとすることで多くのことを学びました。さらに先に進む必要がある場合は、たとえばファイルで複雑なフィルターを定義し、コマンドでそれらを呼び出すことができます。また、ディレクトリごとのフィルターを使用して、コピー時にデータを圧縮することもできますが、これはほんの一面です!
ボノブ14

7

これは、cpを使用しても実現できます。こちらをご覧ください:

sudo cp -vnpr /xxx/* /yyy

xxx =ソース

yyy =宛先

v =詳細

n =上書きなし(上書きなし)

p =許可を保持

r =再帰的


5

マニュアルページを見ると、-nオプションが必要なようです。

-n, --no-clobber
   do not overwrite an existing file (overrides the previous -i option)

-nを使用してみましたが、*。jsファイルでフィルタリングすることはできません。
AlbertEngelB 14

0

私のディストリビューションにはclobberがありませんでした:

echo n | cp -vipr xxx yyy

xxx =ソース

yyy =宛先

v =詳細

i =インタラクティブ(上書きのプロンプト)| コマンドの前に「echo n |」が付いている理由

p =許可を保持

r =再帰的

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