根据文件名的第一部分创建文件夹

根据文件名的第一部分创建文件夹

我在具有以下结构的文件夹中有很多文件:

Client1.Date.1.log
Client1.Date.2.log
Client1.Date.3.log
Client2.Date.1.log
Client2.Date.2.log
Client2.Date.3.log

等等。

我有超过 14,000 个文件。我需要为每个客户端创建一个文件夹,并将所有文件移动到正确的客户端文件夹中。我在 Ubuntu 服务器 18.04 终端上。有什么想法吗?

答案1

f您可以使用 shell 参数扩展删除变量中字符串最长的尾随“点后缀”${f%%.*}

例如

for f in *.log; do mkdir -p "${f%%.*}" && mv --no-clobber -- "$f" "${f%%.*}"/; done

我建议先备份你的数据,以防万一它没有达到你的预期

答案2

这是将文件从当前文件夹移动到客户端子文件夹的 Python 脚本。

import os

# Finding files in given format in current directory
files = [fname for fname in os.listdir(".")
         if fname.count(".") == 3 and
            fname.endswith(".log")]

# Parsing client names
def client_name(fname):
    return fname.split(".")[0]

# move files to proper folders. Create folders if they don't exists
for fname in files:
    new_path = os.path.join(client_name(fname), fname)
    os.renames(fname, new_path)

相关内容