mv:ターゲットが存在する場合は、ファイル名に数字を追加します。

mv:ターゲットが存在する場合は、ファイル名に数字を追加します。

ファイルを別のフォルダに移動していて、同じ名前のファイルがすでに存在する場合は、新しく移動したファイルに一種のインデックスを追加したいと思います(以前のファイルは変更されていません)。たとえば、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.pdfsomething.~42~toに変更されますが、something_42ファイルに複数の拡張子があるかどうかは検出できませんarchive.tar.gz.~5~archive.tar_5.gz

おすすめ記事