多年来我积累了大量数据,正在寻找一种可以获取文件夹名称然后按年份将所有文件移动到子文件夹的工具,例如:
2005
2006
2007
etc..
有人知道类似的东西或工具吗?
答案1
将此文本保存到文件 (sort.py
)并运行它:
./sort.py src-dir/ dst-dir/
它循环遍历源目录,获取所有文件和文件夹的 mtime,并将它们移动到目标目录。注意:它不是递归的!使用它需要您自担风险!
#!/usr/bin/env python #-*- 编码:iso-8859-15-*- 导入操作系统 导入系统 导入shutil 从日期时间导入日期 # 检查参数 如果 len(sys.argv) > 2: src = sys.argv[1] dst = sys.argv[2] 别的: 打印“参数:./sort.py [src] [dst]” 系统退出(1) # 检查路径 如果不是 os.access(src,os.R_OK): 打印“未找到源路径” 系统退出(2) 如果不是 os.access(dst,os.W_OK): 打印“未找到目标路径” 系统退出(3) # 从根开始排序 对于 os.listdir(src) 中的 f: fpath = os.path.join(src, f) mtime = os.stat(fpath).st_mtime year = str(日期.来自时间戳(mtime).year) ypath = os.path.join(dst,年份) 如果不是 os.access(ypath,os.W_OK): os.mkdir(ypath) 打印“将 %s 移动到 %s” % (fpath, ypath) 关闭.移动(fpath,ypath)
答案2
使用 的解决方案bash
。
保存以下脚本到~/my-script
#!/bin/bash
dst="$1"
shift
for f; do
year=$(stat -c '%y' "$f" | sed 's/-.*//')
ext=$(sed 's/.\+\.//' <<<"$f")
ext=
[[ $ext == $f ]] && ext=
dir="$dst/$year/$ext"
mkdir -p "$dir"
cp --backup=numbered "$f" "$dir"
done
使其可执行,然后运行
find /path/from -type f -exec ./my-script /path/to {} +
其中/path/from
和/path/to
应该替换为源目录和目标目录。例如,假设您的所有数据都在家中,您可以执行
find $HOME/* -type f -exec ./my-script $HOME/DocumentsByYear {} +
其中~/DocumentsByYear
,所有子目录将根据需要创建。我将其设置为源路径$HOME/*
以避免隐藏文件。
如果您用 注释该行ext=
,您将获得每年子目录中按文件扩展名进一步分类的结果。
该脚本使用命令的备份功能来解决名称冲突cp
。