web-dev-qa-db-ja.com

再帰的な、上書きしないファイルコピー?

CoffeeScript/JavaScriptファイルを含む他のたくさんのフォルダーを含むディレクトリがあります。 CoffeeScriptファイルを同じフォルダー構造で新しいフォルダーにコンパイルできます。

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

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

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

23
AlbertEngelB

あなたはrsyncを使うことができます(それはローカルコピーもします)

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

最後に、-P進行状況を確認したい場合は、--list-only実際にコピーせずに何がコピーされるかを確認したい場合は、-tタイムスタンプを保持したい場合。


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

26
bonob

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

Sudo cp -vnpr /xxx/* /yyy

xxx =ソース

yyy =宛先

v =詳細

n =クローバーなし(上書きなし)

p =権限を保持する

r =再帰的

7
SEMbyotic

Manページを見ると、-nオプション。

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

私のディストリビューションには利用可能なクローバーがありませんでした。

echo n | cp -vipr xxx yyy

xxx =ソース

yyy =宛先

v =詳細

i =対話型(上書きを促す)| コマンドの前に "echo n |"が付いているのはこのためです

p =権限を保持する

r =再帰的

0
Octavian