有没有一种方法可以按月组织新目录中的视频文件?

时间:2020-07-10 01:26:55

标签: python bash macos terminal file-management

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

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

我希望使用它来处理500多个视频文件。如果我可以有一个脚本为我自己做,而不是一个一个地遍历它们,那将对我有极大帮助。

脚本之前

enter image description here

enter image description here

脚本后(所需的输出)

enter image description here

更新(找到解决方案)

我最终找到了解决方案,谢谢您为我提供了正确的答案。现在我今天学到了一件事

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 个答案:

答案 0 :(得分:1)

您可以编写一个为您执行此操作的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

为了将时间戳转换为日期时间,可以使用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")

答案 1 :(得分:0)

按月在新目录中分离视频文件

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

或具有多个文件夹/目录

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

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