Поиск сценария/инструмента для движущихся файлов и подпапок к каталогу к году

Я получил много данных за эти годы, и я ищу инструмент, который может получить имя папки и затем переместить все файлы в подпапки к году, как:

2005
2006
2007
etc..

Кто-либо знает что-то или подобный инструмент?

5
задан 5 September 2011 в 05:31

2 ответа

Сохраните этот текст в файл (sort.py) и выполненный это:

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

Это циклично выполняется через исходный каталог, получает mtime всех файлов и папок, и перемещает их в целевой каталог.Примечание: Это не рекурсивно! Используйте его на Ваш собственный риск!

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


import os
import sys
import shutil
from datetime import date

# Check arguments
if len(sys.argv) > 2:
    src = sys.argv[1]
    dst = sys.argv[2]
else:
    print "Arguments: ./sort.py [src] [dst]"
    sys.exit(1)

# Check paths
if not os.access(src, os.R_OK):
    print "Source path not found"
    sys.exit(2)

if not os.access(dst, os.W_OK):
    print "Destination path not found"
    sys.exit(3)

# Start sorting from root
for f in os.listdir(src):
    fpath = os.path.join(src, f)
    mtime = os.stat(fpath).st_mtime
    year = str(date.fromtimestamp(mtime).year)
    ypath = os.path.join(dst, year)
    if not os.access(ypath, os.W_OK):
        os.mkdir(ypath)

    print "Moving %s to %s" % (fpath, ypath)
    shutil.move(fpath, ypath)
1
ответ дан 23 November 2019 в 10:45

Использование решения 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 команда.

0
ответ дан 23 November 2019 в 10:45

Другие вопросы по тегам:

Похожие вопросы: