以下のディレクトリツリーを例として使用すると、directory/folderA
の内容をdirectory
に移動するための最良の方法は何ですか。
同じ名前のファイルが宛先に存在する場合にファイルを上書きする方法(例:directory/folderA/2017/06/info.log
およびdirectory/2017/06/info.log
)。
directory
|-- folderA
| |-- 2017
| | |-- 06
| |
| |-- 2016
| | |-- 12
| | |-- 11
| | |-- 10
|
|-- 2017
| |-- 04
| |-- 05
| |-- 06
|
|-- 2016
| |
rsync -a --remove-source-files src/ dest
のようなもの?簡単なテストでは、dest
に存在するが、src
には存在しないものはすべて保持されることが示されています。 (src
の後のスラッシュに注意してください。ここで必要です。)
保存をさらに一歩進めて、--ignore-existing
を追加すると、dest
にあるファイルがsrc
にも存在していても上書きされません。ただし、--remove-source-files
は宛先に正常に転送されたファイルにのみ適用されるため、src
にファイルが残っている可能性があります。
一般的に、rsync
は、多数のオプションを備えた非常に強力なツールです。 (それに比例して、少し学習曲線があります...ここでのケースは非常に単純ですが、そうです。)まともなチャンスが来る前に誰かがコピーシナリオを考えた場合、それはrsync
でカバーされます。
tar -cv /parent_folder/subfolder/* -f - I tar -xv --overwrite /parent_folder/
tarを使用してディレクトリ全体をパックし、親フォルダのunarにパイプするのが最善の選択かもしれません(bzipでtarファイルをフィルタリングする場合は、パイプの前と後の両方に-jを追加してください)
—overwrite:tarファイルから抽出したファイルで既存のファイルを上書きします