フォルダ全体をソースからターゲットにコピーし、ターゲットから重複ファイルまたはフォルダを削除します。

フォルダ全体をソースからターゲットにコピーし、ターゲットから重複ファイルまたはフォルダを削除します。

/var/www/html/test/ソースからターゲットにすべてのファイルとディレクトリをコピーする必要があります/var/www/html/test2/。ソースからファイルをコピーした後、削除する必要がある追加のファイルとフォルダがターゲットに既に存在する可能性があります。

コピーする前にターゲットの内容をすべて削除することはできません。

修正する

私は以下を試しました:

cp1) コマンドを使用してソースからターゲットにファイルをコピーする

cp -R source destination

うまくいきます。

2) ターゲットファイルのすべてのファイルを繰り返して、ファイルがソースに存在することを確認しました。ファイルがターゲットから削除されていない場合

for file in /var/www/html/test2/*; 
  do filestr=`basename $file`;echo $file; 
  if [ `ls /var/www/test1/ | grep -c $filestr` -eq 0 ]; 
 then rm $file; fi; 
done;

ターゲットのルートファイルにのみ適用されます。

ソースと一致する場合は、すべてのファイルとディレクトリを再帰的に確認する方法を理解する必要があります。

ベストアンサー1

これは典型的なユースケースですrsyncrsyncディレクトリツリーがソースから宛先にコピーされます。重複したアイテムを削除するように要求することもできます。その他コピーされたファイル:

rsync -a -v --delete-after /var/www/html/test/ /var/www/html/test2  

/末尾のソース仕様を参照してください。これを省略すると、不要なソースディレクトリ自体がコピーされます。

静かにしたい場合は削除してください-v。ファイルが大きくて圧縮可能な場合は、ファイルを追加して圧縮して-z解凍できますが、そうすることで多くの利点が得られるかどうか疑問です。この--delete-afterオプションは、ターゲット上の重複したファイルとフォルダのみを削除しますが、削除しません。後ろに他のファイルはコピーされました。

使用の利点は、rsync同じファイル(つまり、すでに存在し、実際に一致するファイル)をコピーする必要がないことです。

おすすめ記事