ファイル名が重複するファイルを1つのディレクトリにコピーし、重複するファイルの名前を自動的に変更して両方のファイルを保持するにはどうすればよいですか?


11

Windows OSでは、その名前のファイルが既に存在するディレクトリにファイルをコピーすると、次の操作を行うかどうかを尋ねられます。

  1. ファイルをコピーして、既存のファイルを置き換え/上書きします
  2. 新しいファイルのディレクトリへのコピーをキャンセルする
  3. ファイルをコピーしますが、名前を変更します( "filename-copy(1)"のようなもの)

私がUbuntuでこれを行うとき、私はその3番目のオプション(多くの場合非常に便利なオプションです)を持っていません。Ubuntuでそれを行うことができる方法はありますか?

回答:


17

残念ながら、Nautilusにはそのオプションはありません。

オプション1:別のファイルマネージャー

Dolphinなどの別のファイルマネージャを試すことができます。

DolphinをインストールするUniverseリポジトリが必要です)

オプション2:コマンドライン

コマンドラインプログラムcp(1)をバックアップオプションとともに使用することもできます。

cp --backup -t DESTINATION SOURCE [SOURCE...]

これには次の効果があり、のマニュアルページで説明されているように、他のオプションで制御できますcp(1)

--backup[=CONTROL] ―既存の各宛先ファイルのバックアップを作成します

-b--backup議論に似ているが受け入れない

-S--suffix=SUFFIX―通常のバックアップサフィックスを上書きする

またはで~設定しない限り、バックアップサフィックスはです。バージョン管理方法は、オプションまたは環境変数を使用して選択できます。値は次のとおりです。--suffixSIMPLE_BACKUP_SUFFIX--backupVERSION_CONTROL

  • noneoff:(--backup指定されている場合でも)バックアップを作成しません
  • numberedt:番号付きバックアップを作成
  • existingnil:番号付きバックアップが存在する場合は番号付き、それ以外の場合は単純
  • simplenever:常に単純なバックアップを作成します

cp --backup=existing --suffix=.orig -t ~/Videos ~/Music/*

これにより、すべてのファイルがにコピーさ~/Music~/Videosます。同じ名前のファイルが宛先に存在する場合、.origバックアップとしてその名前に追加することによって名前が変更されます。バックアップと同じ名前のファイルが存在する場合、代わりにバックアップが追加され.1、それが存在する場合も同様.2です。その後でのみ、ソースファイルが宛先にコピーされます。

サブディレクトリにファイルを再帰的にコピーしたい場合は、次を使用します:

cp -R --backup=existing --suffix=.orig -t ~/Videos ~/Music

別のファイルマネージャを使用するよう提案していただきありがとうございます。残念ながら、Thunarにも私が言及しているオプションはありません。キャンセル、すべてスキップ、スキップ、置換、すべて置換があります。イルカを試してみます。
heisenbergman 2014年

1
イルカはこれに最適です:)
heisenbergman '19 / 10/19

2つを試していただきありがとうございます。調査結果に応じて質問を更新します。
David Foerster 2014年

@heisenbergman、こんにちはDolphinがこれに最適な理由は何ですか?名前を変更するオプションはありますが、ファイルの名前を1つずつ変更することしかできません。残念ながら、「すべてに適用」オプションは、名前を変更するオプションと一緒に使用できません。これは、大量のファイルにはまったく役に立ちません。これは私のバージョンですか?Dolphinを使用して、すべてのdoubleの名前を(Windowsでできるように)一度に変更できましたか?
Kvothe 2018

2

スーパーユーザーでこれを見つけました

#!/bin/bash
cp -vn "$1" "$2"/ || cp -vn "$1" "$2"/"${1##*/}"~"$(md5sum "$1" | cut -f1 -d' ')"

同じ名前のファイルは、名前にmd5sumが追加されたファイルに名前が変更されます。「saveCopy」のようなファイル名で保存すると、次のfindように実行できます。

find . -name 'z*.jpg' -exec ./saveCopy {} /tmp/Extracted/ \;

詳細については、リンクを参照してください。


0

以前、このフォーラムでこの質問に対する解決策(超複写機)がありました。https://ubuntuforums.org/showthread.php?t = 2251859を参照してください。その議論によると、Nautilusに統合できます。


0

このスクリプトをトップディレクトリにコピーし、実行可能にして実行します。

#!/bin/bash

## Get a list of all files
list=$(find . -mindepth 2 -type f -print)
nr=1

## Move all files that are unique
find . -mindepth 2 -type f -print0 | while IFS= read -r -d '' file; do
    mv -n $file ./
done
list=$(find . -mindepth 2 -type f -print)

## Checking which files need to be renamed
while [[ $list != '' ]] ; do
   ##Remaming the un-moved files to unique names and move the renamed files
   find . -mindepth 2 -type f -print0 | while IFS= read -r -d '' file; do
       current_file=$(basename $file)
       mv -n $file "./${nr}${current_file}"
   done
   ## Incrementing counter to prefix to file name
   nr=$((nr+1))
   list=$(find . -mindepth 2 -type f -print)
done
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.