535個のフォルダー(recup_dir.1
、recup_dir.2
、...、recup_dir.535
)があり、それらのフォルダーの内容を1つのフォルダーにマージ(結合)したい名前はrecup_dir
)。一部のファイルは同じ名前(img.jpg
など)を持っている可能性があり、既存のファイルを上書きしないでください(代わりにimg1.jpg
、img2.jpg
などのように名前を変更する必要があります...) 。
コマンドラインを使用してそのようなことを行う方法はありますか?
以下のスクリプトは、535フォルダを含む1つのディレクトリからすべてのファイルを(再帰的に)別の(単一の)ディレクトリに移動し、元のファイル名を保持します。
重複の場合
(のみ)名前が重複している場合、ファイルの名前はduplicate_1_[filename]
、duplicate_2_[filename]
などに変更されます。
以下のスクリプトを空のファイルにコピーし、rearrange.py
として保存し、ソースと宛先(ディレクトリ)への正しいパスを設定し、それを実行します:
python rearrange.py
スクリプト:
#!/usr/bin/env python
import os
import shutil
# --------------------------------------------------------
reorg_dir = "/path/to/sourcedirectory"
target_dir = "/path/to/destination"
# ---------------------------------------------------------
for root, dirs, files in os.walk(reorg_dir):
for name in files:
subject = root+"/"+name
n = 1; name_orig = name
while os.path.exists(target_dir+"/"+name):
name = "duplicate_"+str(n)+"_"+name_orig; n = n+1
newfile = target_dir+"/"+name; shutil.move(subject, newfile)
以下のバージョンを使用し、上記の説明に従って保存します(ただし、何も変更しないでください)。実行可能にします。それを使用するには、ターミナルウィンドウを開き、スクリプトをターミナルウィンドウにドラッグしてから、ソースディレクトリ、最後にドラッグします。ターミナルに表示されるコマンド:
rearrange.py /path/to/source /path/to/destination
Returnキーを押すと完了です。
スクリプト:
#!/usr/bin/env python
import os
import shutil
import sys
# --------------------------------------------------------
reorg_dir = sys.argv[1]
target_dir = sys.argv[2]
# ---------------------------------------------------------
for root, dirs, files in os.walk(reorg_dir):
for name in files:
subject = root+"/"+name
n = 1; name_orig = name
while os.path.exists(target_dir+"/"+name):
name = "duplicate_"+str(n)+"_"+name_orig; n = n+1
newfile = target_dir+"/"+name; shutil.move(subject, newfile)
現在のディレクトリを変更せずにcopyだけを新しいディレクトリに保存したい場合は、最後の(セクションの)行を置き換えるだけです:
交換:
shutil.move(subject, newfile)
沿って:
shutil.copy(subject, newfile)
Sudo cp -r --backup=t recup_dir.*/* recup_dir
このコマンドは、すべての535フォルダーの内容をrecup_dir
にコピーし、既存のファイルの名前をfile.~1~ file.~2~ ..
に変更します
535フォルダとその内容はまだ存在します。コピー後に削除したい場合は、最初のコマンドの後に&& Sudo rm -rf recup_dir.*
を追加するだけなので、次のようになります。
Sudo cp -r --backup=t recup_dir.*/* recup_dir && Sudo rm -rf recup_dir.