ファイルを別のフォルダに移動していて、同じ名前のファイルがすでに存在する場合は、新しく移動したファイルに一種のインデックスを追加したいと思います(以前のファイルは変更されていません)。たとえば、file.pdf
私は同じ名前の次のファイルが存在するfile1.pdf
場合を好みます。file_1.pdf
ここ反対のアイデアのバリエーションを見つけましたが、「バックアップ」を作成したくありません。
mv
このシナリオにデフォルトで提供されるパラメータはありますか?私はUbuntu Linuxを使用しています。
ベストアンサー1
リンクした質問に対する回答ですでに指摘したように、移動したファイルで上書きされるmv
ファイルにサフィックスを追加し、数字を使用して一意のファイル名を指定できます。
mv --backup=t <source_file> <dest_file>
このコマンドは、未使用の次の数値サフィックスをターゲットディレクトリの最初のファイルに追加することで機能します。移動中のファイルは元の名前を保持します。
.~1~
しかし、これはあなたが望むものではないようなサフィックスを追加します。
$ ls
file.pdf
file.pdf.~1~
file.pdf.~2~
2番目のステップでは、これらのファイルの名前を変更して別のfile_1.pdf
形式で名前を取得できますfile.pdf.~1~
。たとえば、次のようになります。
rename 's/((?:\..+)?)\.~(\d+)~$/_$2$1/' *.~*~
これにより、不要なバックアップサフィックスで終わるすべてのファイルがインポートされ(シェルのglobマッチングによって*.~*~
)、ツールがファイル名の正規表現rename
と一致するようにします。((?:\..+)?)\.~(\d+)~$
一致するものがある場合は、サフィックス類似インデックスを.~1~
2番目のグループ($2
)でキャプチャし、オプションでファイル名の対応するサフィックスの前に拡張子がある場合(たとえば)、最初のグループ()でキャプチャします.pdf
。$1
次に、完全一致ファイル名の部分を置き換え、プレースホルダの_$2$1
代わりにキャプチャされた値を挿入します。
file.pdf.~1~
デフォルトでは、名前はtofile_1.pdf
とsomething.~42~
toに変更されますが、something_42
ファイルに複数の拡張子があるかどうかは検出できませんarchive.tar.gz.~5~
。archive.tar_5.gz