重複項目の移動、マージ、名前変更のためのLinuxコマンド

重複項目の移動、マージ、名前変更のためのLinuxコマンド

ディレクトリ(サブディレクトリとファイルを含む)を別のディレクトリに移動しようとしています。一部のmvフォルダは、ファイルが同じディレクトリに存在するため、マージされません。これは、ソースディレクトリにあるファイルが最新バージョンであっても移動すると削除されるため、これはお勧めできません。

次のコマンドが必要です。

  1. 宛先ディレクトリに存在しないディレクトリを移動します。
  2. ターゲットディレクトリにすでに存在するディレクトリをマージします。
  3. 重複したファイルの名前を変更します(たとえば、file.txtすでに存在する場合はソースファイルの名前をに変更しますfile(1).txt)。

私はこれらすべてを処理するものが見つかりませんでした。

編集する

次のコマンドを試してみました。

mv -u [source] [destination]

ターゲットに存在しないディレクトリだけを移動し、重複した内容があるディレクトリは削除されると思います。したがって、ソースディレクトリのすべての最新ファイルは移動時に失われます。代わりに、これらのディレクトリをマージし、重複したファイルの名前を変更する必要があります。私はそれを十分に説明したことを願っています。

PS これは、ターミナルコマンドで書かれた場合に最適です。スクリプトを作成した経験はありません。

助けてくれてありがとう!

答え1

ファイルが思ったように移動しないことがあります。-tor-Tオプションを使用することをお勧めしますmv

答え2

これは私が必要とするものを達成するために使用したものです。完璧ではありませんが、多くのディレクトリが移動されたため、移動/マージは99%完了しました。

まず、「mv」を使用して、すべてのディレクトリを存在しない新しいターゲットに移動しました。各ターゲットフォルダには、「a、b、c ...」というラベルが付けられています。 「A」で始まる各ソースディレクトリを対応するターゲットディレクトリ(「a」)に移動したいと思います。

mv -u /[source directory]/A* /[destination directory]/a && mv -u /[source directory]/B* /[destination directory]/b && so on and so on...

%がすでにターゲットに存在するため、すべてのディレクトリを移動するわけではありません。次に、上記とrsync非常によく似たコマンドを実行します。

rsync --progress --remove-source-files -arvu /[source directory]/A* /[destination directory]/a && rsync --progress --remove-source-files -arvu /[source directory]/B* /[destination directory]/b && and so on and so on... 

私のターゲットディレクトリはAZと0-9だったので、文字と数字を変更しながらこのコマンドを続けて実行し、コマンドを&&。コマンド。

これを達成するために、次のコマンドを実行しました。

find . -type d -empty -print -delete

これは rsync が残した空のディレクトリを処理します。 rsyncを介してこれを行うことはできますか?わかりません。私は新しいことを学ぶためにここに来た初心者です。

私が言ったように完璧ではありませんが、私には効果があり、これが他の人にも役立つことを願っています。

関連情報