Есть ли способ упорядочить видео файлы по месяцам в новых каталогах? - PullRequest
0 голосов
/ 10 июля 2020

Я относительно новичок в bash. Я хотел знать, есть ли в терминале Ma c OS существующая команда для разделения видеофайлов по месяцам в новых каталогах. По сути, это означает, что если бы у меня были видео в течение 12 месяцев, у меня было бы 12 новых каталогов с видео, помещенными внутрь.

В противном случае мне было интересно, есть ли другой способ сделать это, возможно, через python для решения такой проблемы.

Я надеялся использовать это для работы с 500+ видеофайлами. Мне бы очень помогло, если бы у меня был сценарий, делающий это за меня, вместо того, чтобы просматривать их один за другим.

Before Script

enter image description here

enter image description here

After Script(Desired Output)

введите описание изображения здесь

Обновление (решение найдено)

В итоге я нашел решение, спасибо, что привели меня к правильному ответу. Теперь я узнал одну новую вещь сегодня

import os, shutil 
from datetime import datetime

filepath = "/Users/alfietorres/Downloads/"      #base file path 
for filename in os.listdir(filepath):           #iterate through each file in the directory

    r = os.stat(filepath+filename)              #look for the file path and the file name
    d = r.st_birthtime                          #look for the time created 
    date=datetime.fromtimestamp(d)              #assign the details to a date variable

    month_directory = filepath+str(date.month)+"-"+str(date.year)      #use the date variable to create a UNIQUE new directory 
    file_being_moved = filepath+filename        #file the path of the file being moved    

    if os.path.isdir(month_directory) :         #check if the directory is created
        print("directory found ... ")
        shutil.move(file_being_moved,month_directory)   #move the file we are iterating on to the directory
    else: 
        print("creating directory ... ")        
        os.mkdir(month_directory)                       #create new directory 
        shutil.move(file_being_moved,month_directory)   #move items in new directory

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Вы можете написать сценарий python, который сделает это за вас.

Используйте модуль os для получения информации о ваших файлах. В частности, время создания:

import os
r = os.stat("path/to/file")
print(r.st_ctime_ns)   # it prints the number of nano seconds since creation (Windows OS)

Чтобы получить список файлов / каталогов в каталоге, вы также можете использовать модуль os:

os.listdir("path/to/directory/")  # you get a list of all files/directories

Чтобы преобразовать timestamp в datetime, вы можете использовать datetime module:

from datetime import datetime
d = r.st_ctime_ns // 1000000   # convert to seconds
date = datetime.fromtimestamp(d)
print(date)   ##  datetime.datetime(2019, 3, 19, 5, 37, 22)
print(date.year)  ## get the year
print(date.month)  ## get the month
print(date.day)   ## get the day

Теперь вам нужно просто скомбинировать эту информацию для организации ваших файлов.

Другая полезная информация:

  • Чтобы создать каталог, используйте os.mkdir("directory name")
  • Чтобы переместить файл, используйте os.rename("old path", "new path")
0 голосов
/ 10 июля 2020

разделить видеофайлы по месяцам в новых каталогах

From info date

‘-r FILE’
‘--reference=FILE’
     Display the date and time of the last modification of FILE, instead
     of the current date and time.

Таким образом, чтобы получить месяц с момента последнего изменения файла.

date -r file '+%m'

С bash и find.

#!/usr/bin/env bash

dirs=("$@")

find "${dirs[@]}" -type f -print0 | {
  while IFS= read -rd '' file; do
    file_name=${file##*/}
    path_name=${file%"$file_name"}
    directory=$(date -r "$file" "+%m")
    if ! [[ -e "${path_name}month$directory" && -d "${path_name}month$directory" ]]; then
      echo mkdir -p "${path_name}month$directory" && echo mv -v "$file" "${path_name}month$directory"
    else
      echo mv -v "$file" "${path_name}month$directory"
    fi
  done
}

Для использования сценария предполагается, что имя сценария - myscript, а folder_name - это имя рассматриваемого каталога.

./myscript folder_name

Или с несколькими папками / каталогами

./myscript folder1 folder2 folder3 folder4 another_folder /path/to/folder
  • -type f ищет файлы, а не каталоги.

  • Удалите все echo, если результат вас устраивает, и измените все mv на cp, чтобы просто скопировать файлы, а не перемещать их полностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...