使用 python 或 bash 按时间戳将音频文件复制到新文件夹

Posted

技术标签:

【中文标题】使用 python 或 bash 按时间戳将音频文件复制到新文件夹【英文标题】:use python or bash to copy audio files by time stamp to new folder 【发布时间】:2017-09-06 03:03:07 【问题描述】:

您好,我一直在想办法在我们的存档服务器中恢复我们的音频文件。它们分散在该服务器的几个子目录中,并且命名模式有些不同。它们大多位于“/media/recordings”目录中。

下面是我所说的几个例子。

YYYY_XXX) XXX-XXXX_20151125-094056_10931-all
YYYYYYY_XXX-XXX-XXXX _20151013-094634_10896-all
YYYY_(XXX) XXX-XXXX_20151116-120923_10215-all
YYYYY_ XXXXXXXXXX_20160307-152940_11033-all

音频文件都是 .wav 和 .mp3 的,它们在文件名中都有一个时间戳,我试图将其隔离并用作模型以切入 YYYY/MM/DD 以创建子目录。我读过其他一些人试图用 bash 组织那里的文件,并试图使某些东西适应工作,但似乎无法提出一个工作脚本。请帮忙。

我想从 /media/recordings/MP3 和 ORIG 复制这些文件,但不包括 /media/recording/ORIG/sorted 到“/media/recordings/ORIG/sorted”作为目标位置。并按年/月/日子目录对这些文件进行排序。

这是一台带有 python 2.6.6 的旧 centos 机器。我试图调整一些可以转到目录并递归导航子目录的东西,但我的时间有限,无法解决这个问题,任何帮助将不胜感激。

【问题讨论】:

检查这个关于将特定扩展名的文件从多个文件夹复制到单个文件夹的帖子。 ***.com/questions/31859887/… 你的问题不清楚。您没有显示 MP3 或 WAV 文件名的任何示例。你的YYYY_XXX) XXX-XXXX_20151125-094056_10931-all 是什么?文件?目录?一旦将文件移动到 YYYY/MM/DD 目录中,您希望文件使用什么新名称?请尽量清楚地解释您拥有什么以及您想要什么。 请edit您的问题显示the code you have so far。您应该至少包含您遇到问题的代码的大纲(但最好是minimal reproducible example),然后我们可以尝试帮助解决具体问题。您还应该阅读How to Ask。 我删除了文件名的 .mp3 或 .wav。每个都可以是 wav 或 mp3。抱歉没有例子,我的一般做法是在我遇到死胡同时把石板擦干净。从焕然一新的外观开始。我刚刚经历了 2 个周期并删除了所有示例以重新开始。并且开始时间不够用了。 【参考方案1】:

如果我了解您的需要:

#!/bin/bash 
source_dir="/media/recordings"
dest_dir="/media/recordings/ORIG/sorted"
for file in $source_dir/MP3,ORIG/*; do
    etime=$(stat -c %Y "$file")
    fdate=$(date -d @$etime +"%Y-%m-%d")
    if [[ ! -d "$dest_dir/$fdate" ]]; then
        mkdir "$dest_dir/$fdate"
        mv "$file" "$dest_dir/$fdate"
    else
        mv "$file" "$dest_dir/$fdate"
    fi
done

该脚本将搜索 source_dir/MP3 和 ORIG 目录中的所有文件,并将它们移动到按日期排序的 dest_dir/YYYY-MM-DD 位置。文件名和目录名中不允许使用字符 /。

$ tree media/recordings/ORIG/sorted
├── 2014-10-30
│   └── song.mp3
├── 2015-11-07
│   └── song.wav
├── 2015-11-12
│   └── another_song.mp3
├── 2017-07-11
│   └── another_song.wav
├── 2017-09-06
│   ├── song-1.mp3
│   ├── song-2.wav
│   └── song-3.mp3

【讨论】:

感谢您回复我。我稍作修改以复制并为每个音频创建一个子文件夹。像这样的 2014/12/02。我已经运行了脚本,但它没有正确读取时间戳,我在同一个文件夹中获得了多天。这是我到目前为止所拥有的。 #!/bin/bash source_dir="/media/recordings/" dest_dir="/media/recordings/ORIG/sorted" 用于 $source_dir/MP3,ORIG/* 中的文件;做 etime=$(stat -c %Y "$file") fdate=$(date -d @$etime +"%Y/%m/%d") if [[ ! -d "$dest_dir/$fdate" ]];然后 mkdir -v -p "$dest_dir/$fdate" cp "$file" "$dest_dir/$fdate" else cp "$file" "$dest_dir/$fdate" fi 完成 对不起,这是我在这里的第二篇文章,我似乎无法让格式看起来像你的。

以上是关于使用 python 或 bash 按时间戳将音频文件复制到新文件夹的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中读取音频流

Python音频功能无法按预期工作

Python打开原始音频数据文件

如何使用 python 绘制整个音频文件的频谱或频率与幅度的关系?

Python:使用 PyAudio(或其他东西)的实时音频流?

根据 postgresQL 中的时间戳将值从一个表映射到另一个表