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

Если можно, я хотел бы сделать исправление здесь. Ubuntu и Kubuntu получают официальную поддержку от Canonical, корпорации Ubuntu. Xubuntu никогда не получал поддержки, хотя она признана официальной производной. Разработчики Xubuntu делают это в свое время в качестве добровольцев. Для использования на более старом компьютере я бы предложил либо Xubuntu, либо Lubuntu, оба из которых предназначены для использования меньшего количества ресурсов, чем Ubuntu и Kubuntu.

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

10 ответов

Решение с использованием 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
ответ дан 25 July 2018 в 21:22
  • 1
    отлично, вы можете дать мне просто реальное использование синтаксиса, я не понял / path / to {} part ... – Amir Ashkenazi 6 September 2011 в 08:42
  • 2
    @Amir Ashkenazi: см. Модифицированный ответ с добавленным примером. – enzotib 6 September 2011 в 17:00

Сохраните этот текст в файле (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
ответ дан 25 July 2018 в 21:22

Решение с использованием 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
ответ дан 2 August 2018 в 03:01
  • 1
    отлично, вы можете дать мне просто реальное использование синтаксиса, я не понял / path / to {} part ... – Amir Ashkenazi 6 September 2011 в 08:42
  • 2
    @Amir Ashkenazi: см. Модифицированный ответ с добавленным примером. – enzotib 6 September 2011 в 17:00

Сохраните этот текст в файле (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
ответ дан 2 August 2018 в 03:01

Решение с использованием 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
ответ дан 4 August 2018 в 18:51
  • 1
    отлично, вы можете дать мне просто реальное использование синтаксиса, я не понял / path / to {} part ... – Amir Ashkenazi 6 September 2011 в 08:42
  • 2
    @Amir Ashkenazi: см. Модифицированный ответ с добавленным примером. – enzotib 6 September 2011 в 17:00

Сохраните этот текст в файле (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
ответ дан 4 August 2018 в 18:51

Решение с использованием 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
ответ дан 6 August 2018 в 03:14
  • 1
    отлично, вы можете дать мне просто реальное использование синтаксиса, я не понял / path / to {} part ... – Amir Ashkenazi 6 September 2011 в 08:42
  • 2
    @Amir Ashkenazi: см. Модифицированный ответ с добавленным примером. – enzotib 6 September 2011 в 17:00

Сохраните этот текст в файле (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
ответ дан 6 August 2018 в 03:14

Решение с использованием 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
ответ дан 7 August 2018 в 20:55
  • 1
    отлично, вы можете дать мне просто реальное использование синтаксиса, я не понял / path / to {} part ... – Amir Ashkenazi 6 September 2011 в 08:42
  • 2
    @Amir Ashkenazi: см. Модифицированный ответ с добавленным примером. – enzotib 6 September 2011 в 17:00

Сохраните этот текст в файле (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
ответ дан 7 August 2018 в 20:55

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

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