如何使用命令行合并数百个文件夹

如何使用命令行合并数百个文件夹

我有 535 个文件夹(recup_dir.1、、recup_dir.2...、recup_dir.535),我想将这些文件夹的内容合并(组合?)到一个文件夹中(假设文件夹名为recup_dir)。某些文件可能具有相同的名称(例如img.jpg),它们不应覆盖现有文件(而应将它们重命名为,例如img1.jpgimg2.jpg等等...)。

有没有办法使用命令行来做这样的事情?

答案1

下面的脚本将所有文件从一个目录(包含 535 个文件夹)(递归地)移动到另一个(单个)目录,并保留其原始文件名。

如果有重复

(仅)在名称重复的情况下,文件将重命名为等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)

对于(gnome-)终端的“拖放”功能:

使用以下版本,按上述方法保存(但不要更改任何内容)并使其可执行。要使用它,请打开终端窗口,将脚本拖到终端窗口上,然后拖到源目录,最后拖到目标目录。然后您将在终端中看到以下命令:

rearrange.py /path/to/source /path/to/destination

按回车键就完成了。

剧本:

#!/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)

复制而不是移动

如果你想保持当前目录不变,并且只复制将文件放入新目录中,只需替换最后一行(部分):

代替:

shutil.move(subject, newfile)

经过:

shutil.copy(subject, newfile)

答案2

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.

相关内容