さまざまな場所のファイルを名前付きフォルダに移動する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
答え2
ここにスクリプトがあります。呼び出す場合は、move
コマンドを使用する必要があります。move file destination
#!/bin/bash
FILE=$1
DEST=$2
if `ls ${DEST}/${FILE} > /dev/null`
then
base=`echo ${FILE} | sed 's/\(.*\)\..*/\1/'`
ext=`echo ${FILE} | sed 's/.*\.\(.*\)/\1'`
r=$RANDOM
mv ${FILE} ${DEST}/${base}-${r}.${ext}
else
mv ${FILE} ${DEST}
fi
ユーザーが両方のパラメータを提供したという事実だけでなく、いくつかの検証(ランダムに番号付けされたファイルがすでに存在しないことを確認するなど)を追加する必要があるかもしれません。