gpt4 book ai didi

linux - 根据部分文件名将文件归档到文件夹中的 Bash 脚本

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:26 24 4
gpt4 key购买 nike

我发现了一些类似问题的示例,这些问题是根据文件名将文件分类到文件夹中,但我真的不知道从哪里开始,因为我需要遍历多个内容,需要一些帮助。

我有一个电话录音文件夹,文件名格式如下:

OUT260-20140828-125114-1409226674.42655.wav

它分为几个部分

OUT260 = 260 is the name of the extension
20140828 = the date
125114 = the time

其余的我不确定,我认为它是 id 之王,因为它每次都会递增。

我想要结束的是以下由 cron 作业/bash 脚本创建的文件夹结构

顶层

分机号码例如

260, 261 ,262

当年然后一个月然后那天然后是多个文件,例如上面的文件名 260-1251.wav

所以如果这可以实现,示例文件将如下所示

/Recordings/260/2014/08/28/260-1251.wav

我有以下示例,这是一个更基本的示例:

#!/bin/bash

for full_filename in *jpg; do
extension="${full_filename##*.}"
filename="${full_filename%.*}"
mkdir -p "$filename/picture"
mv "$full_filename" "$filename/picture"
done

希望这是有道理的任何帮助非常感谢

最佳答案

一种快速但肮脏的方法是使用 sed 将名称替换为路径:

#!/bin/bash
for f in OUT*.jpg
do
res=$(echo "$f" | sed -r 's#^OUT([0-9]+)\-([0-9]{4})([0-9]{2})([0-9]{2})\-([0-9]{4}).*\.(.*)$#/Recordings/\1/\2/\3/\4/\1-\5.\6#g')
mkdir -p `dirname "$res"`
mv "$f" "$res"
done

例如,如果$fOUT260-20140828-125114-1409226674.42655.wav$res/Recordings/260/2014/08/28/260-1251.wav。对于不遵循正确模式的文件名,$res$f 相同,因此什么也不会发生。

sed 使用正则表达式查找和替换(部分)文件名。语法有点难以解释,但互联网上有很多很好的教程。

此外请注意,通常使用像 `/Recordings`` 这样的根目录不是一个好主意...

请先使用cp进行测试...

关于linux - 根据部分文件名将文件归档到文件夹中的 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27610529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com