ファイルが存在する場合は、新しい名前を使用して別のフォルダにコピーします。

ファイルが存在する場合は、新しい名前を使用して別のフォルダにコピーします。

複数の場所とドライブにほぼ同じファイルと名前のフォルダがあります。みんな一箇所に移動したいです。構造は次のとおりです。

Folder 1
--> Folder 1.1
-----> File1.txt
-----> File2.txt
Folder 2
--> Folder 2.1
-----> File1.txt
-----> File2.txt
...
-----> FileN.txt

他のドライブの別の場所にすべて移動したいです。コピーや移動時に移動されるファイルの名前をFileN-copy-1.txtなどに変更したいと思います。これは、MacのFinderでファイルを移動するときの動作と似ています。

rsyncを試してみましたが、移動中の新しいファイルの名前を変更するオプションがないようです。

どんな助けでも大変感謝します。

ベストアンサー1

次のように単純なbashスクリプトを作成できます

#!/bin/bash

MyFolder=/my/folder
DestFold=/destinatin/folder
CpNum=10
i=0

for FlN in $MyFolder; do
  FlNo = echo $FlN |awk -F\/ '{print $NF}'
  if [! -f $DestFold/$FlNo ]; then
    cp $FlN $DestFold/
  else
    FlNo = echo $FlN |awk -F\/ '{print $NF}' 
    while [ $i -lt $CpNum ]; do
      i=$[$i+1]
      if [ ! -f $DestFold/${FlNo%.txt}-copy-$i.txt ]; then
        cp $FlN $DestFold/${FlNo%.txt}-copy-$i.txt
        i=$CpNum
      fi
    done
  fi
done

したがって、検索フォルダとターゲットフォルダを入力してスクリプトを実行します(実行可能にする前に)。

chmod 755 yourscript

スクリプトはファイルを見つけて変数に入れ(FlN)、変数をフォルダーなしでファイル名に切り捨てるか(FlNo)、そのようなファイルがない場合はコピーを作成します。存在する場合は、追加されたファイルを生成します。-コピー-X ファイル名の最後の直前(Xはコピー数)です。変数は$CpNumファイルあたりの最大コピー数です(安全に増やすことができます)。現在は.txtファイルに適用されますが、変更できます。パラメータを使用してスクリプトを呼び出すオプションを追加したり、さまざまな拡張機能にすることができます。

おすすめ記事