寻找用于按年将文件和子文件夹移动到目录的脚本/工具

Ami*_*azi 5 folder files clipboard

这些年来我获得了很多数据,我正在寻找一种可以获取文件夹名称然后按年份将所有文件移动到子文件夹的工具,例如:

2005
2006
2007
etc..
Run Code Online (Sandbox Code Playgroud)

任何人都知道什么或类似的工具?

fal*_*aff 1

将此文本保存到文件 ( sort.py) 中并运行它:

./sort.py src-dir/ dst-dir/

它循环遍历源目录,获取所有文件和文件夹的运行时间,并将它们移动到目标目录。注意:这不是递归!需要您自担风险使用它!

#!/usr/bin/env python
# -*- 编码:iso-8859-15 -*-


导入操作系统
导入系统
进口舒蒂尔
从日期时间导入日期

# 检查参数
如果 len(sys.argv) > 2:
    src = sys.argv[1]
    dst = sys.argv[2]
别的:
    print "参数:./sort.py [src] [dst]"
    系统退出(1)

# 检查路径
如果不是 os.access(src, os.R_OK):
    print "未找到源路径"
    系统退出(2)

如果不是 os.access(dst, os.W_OK):
    打印“未找到目标路径”
    系统退出(3)

# 从根开始排序
对于 os.listdir(src) 中的 f:
    fpath = os.path.join(src, f)
    mtime = os.stat(fpath).st_mtime
    年 = str(日期.fromtimestamp(mtime).年)
    ypath = os.path.join(夏令时, 年)
    如果不是 os.access(ypath, os.W_OK):
        os.mkdir(ypath)

    print "将 %s 移动到 %s" % (fpath, ypath)
    Shutil.move(fpath, ypath)


enz*_*tib 0

使用的解决方案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
Run Code Online (Sandbox Code Playgroud)

使其可执行,然后运行

find /path/from -type f -exec ./my-script /path/to {} +
Run Code Online (Sandbox Code Playgroud)

其中/path/from/path/to应替换为源目录和目标目录。例如,假设您所有的数据都在您家里,您可以执行

find $HOME/* -type f -exec ./my-script $HOME/DocumentsByYear {} +
Run Code Online (Sandbox Code Playgroud)

其中~/DocumentsByYear所有子目录将根据需要创建。我将其作为源路径$HOME/*以避免隐藏文件。

如果您用 注释该行ext=,您将在每年的子目录中获得按文件扩展名的进一步分类。

该脚本负责处理与cp命令的备份功能的名称冲突。