mv、存在する場合は名前を変更


26

多くの画像を1つのディレクトリにまとめる必要があります。これらの画像の多くは同じファイル名を持っています。

いくつかの安全なバージョンが存在するmvことは、対象のファイル名がまだそれが存在する場合は、自動的にファイル名を変更しますpic1.jpegのようなものになりpic1_2.jpeg

私は自分のPythonスクリプトを書くことができましたが、私ができるようにそこにこのようなものがなければなりません:

find . -type f -name *.jpg -exec mvsafe '{}' /targetpath/ \;

回答:


38

mvはすでにこれをサポートしています(少なくともDebianでは):

mv --backup=t <source_file> <dest_file>

mv(1)マンページに見られるように:

--backup[=CONTROL]
         make a backup of each existing destination file

The  backup  suffix  is  `~',  unless  set  with   --suffix   or   SIM‐
PLE_BACKUP_SUFFIX.   The version control method may be selected via the
--backup option or through the  VERSION_CONTROL  environment  variable.

--backup=t「番号付きバックアップを作成する」ことを意味するには、次のように呼び出します。

env VERSION_CONTROL=numbered mv --backup=t <source_file> <dest_file>

(dest_fileはもちろんディレクトリにすることができます)。

編集:それ以降のバージョン(少なくともGNU coreutils 8.22ですが、すでにかなり早い段階で)では、単に書くことができます

mv --backup=numbered <source_file> <dest_file>

1
+1は驚くほどきれいなソリューションです。ところで、このオプションはRHEL 6にもあります。
パウェウブロダッキ

素晴らしい機能ですが、これは拡張子の後にサフィックスを追加するため、私の場合はあまり役に立ちません。したがって、ファイルは.jpg〜1〜のような名前になりますが、_1.jpgという名前にする必要があります。おそらく、移動後にファイルの名前を変更するためにmmvを使用します。
theduke

4
これはMV --backup =番やった後、私の望ましい結果を達成するMMVコマンドです:MMV -v " "#1_#3#2" 〜*〜。"
theduke

私のDebianシステム(mmv 1.01b-18)では、正しいmmvコマンドは次のとおりです。– mmv -v "*.*~*~" "#1_#3.#2"
Xavier
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.