我找到了类似问题的示例,根据文件名将文件排序到文件夹中,但我真的不知道从哪里开始,因为我需要循环处理多个事情,并且可以提供一些帮助。
我有一个电话录音文件夹,文件名格式如下:
OUT260-20140828-125114-1409226674.42655.wav
它分为几个部分
OUT260 = 260 is the name of the extension
20140828 = the date
125114 = the time
其余的我不确定我认为它是id的一个王者,因为它每次都会增加。
我想要最终得到的是由cron job / 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
希望有任何帮助非常有意义
答案 0 :(得分:1)
快速而肮脏的方法是使用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
例如,如果$f
为OUT260-20140828-125114-1409226674.42655.wav
,则$res
为/Recordings/260/2014/08/28/260-1251.wav
。对于不遵循正确模式的文件名,$res
与$f
相同,因此不会发生任何事情。
sed
使用正则表达式来查找和替换(部分)文件名。语法在某种程度上难以解释,但在互联网上有很多很好的教程。
此外请注意,使用像`/ Recordings`这样的根目录通常不是一个好主意......
请先使用cp
进行测试......