ファイル名の競合を避けながら(ファイル|ディレクトリ)移動

ファイル名の競合を避けながら(ファイル|ディレクトリ)移動

さまざまな場所のファイルを名前付きフォルダに移動するbashスクリプトがありますcompleted

以前のファイルを上書きしないようにしたいので、移動したいファイルSelection Of Recipes.zip名(たとえば)がすでに存在する場合は、completedファイル名にランダムな数字または他の文字列を追加して区別します(Selection of Recipes-???.zipここでランダム???な文字列とは何ですか)。

ただ使用することは可能ですかmv、またはその側面を処理するパラメータを使用して別のbashスクリプトを作成する必要がありますか?私が自分でデザインするために使用できるbashスクリプトを持っている人はいますか?

ベストアンサー1

GNUを使用している場合は、mv次のオプションがあります。

$ mv -b source/* dest/.

このスイッチは、ディレクトリ内の競合するmvすべてのファイルをバックアップバージョンにプッシュするように指示します。通常、ファイルをディレクトリに移動する前に、ファイルの末尾にチルダ()を追加します。dest/.~

はい

ファイルを含む次のサンプルディレクトリがあるとします。

$ mkdir source dest
$ touch source/file{1..3} dest/file{1..5}

$ tree
.
├── dest
│   ├── file1
│   ├── file2
│   ├── file3
│   ├── file4
│   └── file5
└── source
    ├── file1
    ├── file2
    └── file3

sourceこれでファイルをから次に移動するときdest

$ mv -b source/* dest/.
$ tree 
.
├── dest
│   ├── file1
│   ├── file1~
│   ├── file2
│   ├── file2~
│   ├── file3
│   ├── file3~
│   ├── file4
│   └── file5
└── source

2 directories, 8 files

制御拡張

同様に、GNUバージョンの場合は、mvスイッチを使用してデフォルトの動作を変更できます-S <string>

$ mv -b -S "string" source/* dest/.

はい

$ mv -b -S .old source/* dest/.

$ tree 
.
├── dest
│   ├── file1
│   ├── file1.old
│   ├── file2
│   ├── file2.old
│   ├── file3
│   ├── file3.old
│   ├── file4
│   └── file5
└── source

2 directories, 8 files

おすすめ記事