有没有办法在新目录中按月组织视频文件?

Is there a way to organise video files by month in new directories?

我对 bash 比较陌生。我想知道 Mac OS' 终端上是否有现有命令可以在新目录中按月分隔视频文件。本质上,这意味着如果我在 12 个月内有视频,我将有 12 个新目录,其中包含视频。

否则,我想知道是否有另一种方法可以通过 python 来解决这个问题。

我希望用它来处理 500 多个视频文件。如果我可以让一个脚本为我做而不是一个一个地检查它们,那将对我有很大帮助。

脚本之前

脚本后(期望的输出)

更新(找到解决方案)

我最终找到了解决方案,感谢您引导我找到正确的答案。今天又学到了一件新东西

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

您可以编写一个 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)

为了获取目录中files/directories的列表,您也可以使用os模块:

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

为了将时间戳转换成日期时间,可以使用datetime模块:

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")

seperate video files by month in new directories

来自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'

bashfind

#!/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

或多个folders/directories

./myscript folder1 folder2 folder3 folder4 another_folder /path/to/folder
  • -type f 查找文件而不是目录。

  • 如果您对输出满意,请删除所有 echo,并将所有 mv 更改为 cp 只是为了复制文件而不是完全移动它们.