Linux 按文件名中的标记排序文件

Linux 按文件名中的标记排序文件,linux,bash,file,directory-structure,Linux,Bash,File,Directory Structure,我的文件夹中有一个要订购的文件列表: Rock, World - SongTitle - Interpret.mp3 Rock, Acoustic, SingerSongwriter - SongTitle2 - Interpret.mp3 Rock, Acoustic - SongTitle3.mp3 SingerSongwriter, World - SongTitle4.mp3 结果应该如下所示: storage/ - Rock, World - SongTitle - Interpre

我的文件夹中有一个要订购的文件列表:

Rock, World - SongTitle - Interpret.mp3
Rock, Acoustic, SingerSongwriter - SongTitle2 - Interpret.mp3
Rock, Acoustic - SongTitle3.mp3
SingerSongwriter, World - SongTitle4.mp3
结果应该如下所示:

storage/
- Rock, World - SongTitle - Interpret.mp3
- Rock, Acoustic, SingerSongwriter - SongTitle2 - Interpret.mp3
- Rock, Acoustic - SongTitle3.mp3
- SingerSongwriter, World - SongTitle4.mp3
tags/
- Rock/
  - LINK TO: storage/Rock, World - SongTitle - Interpret.mp3
  - LINK TO: storage/Rock, Acoustic, SingerSongwriter - SongTitle2 - Interpret.mp3
  - LINK TO: storage/Rock, Acoustic - SongTitle3.mp3
- World/
  - LINK TO: storage/Rock, World - SongTitle - Interpret.mp3
  - LINK TO: storage/SingerSongwriter, World - SongTitle4.mp3
- Acoustic/
  - LINK TO: storage/Rock, Acoustic, SingerSongwriter - SongTitle2 - Interpret.mp3
  - LINK TO: storage/Rock, Acoustic - SongTitle3.mp3
- SingerSongwriter/
  - LINK TO: storage/SingerSongwriter, World - SongTitle4.mp3
  - LINK TO: storage/SingerSongwriter, World - SongTitle4.mp3
我概述了将为我处理的脚本:

#/bin/bash
mkdir-p标签;
mkdir-p存储;
以*存档;做
#从文件名中获取标记
tags=$(echo$file | sed's/-/\n/g');#它不能正常工作
#                                                               #
#这只是盲目的,不能说它是否有效,但应该(TM)#
#                                                               #
#将文件移动到存储文件夹
mv$文件存储/$文件;
#Foreach标签:
而read-r标签;做
#如果标记文件夹尚不存在,请创建它。
mkdir-p标签/$tag;
#创建符号链接
ln-s存储/$file标记/$tag/$file;

完成后,这是我对该线程的回答

#/bin/bash
mkdir-p标签;
mkdir-p存储;
以*存档;做
#从文件名中获取标记
tags=$(echo$file | grep-Eo“^[^-]*”| sed-e's/,/\n/g');
#                                                               #
#这只是盲目的,不能说它是否有效,但应该(TM)#
#                                                               #
#将文件移动到存储文件夹
mv“$file”存储/$file”;
#Foreach标签:
而read-r标签;做
#如果标记文件夹尚不存在,请创建它。
mkdir-p标签/$tag;
#创建符号链接
ln-s“storage/$file”“tags/$tag/$file”;

完成
tags=$(echo$file | grep-Eo“^[^-]*”
?我想你应该澄清一下,你的字面意思是否是对单词
One
Two
Three
(如果你期望达到100,人们不会免费编码;-)。。或者如果你真的是指“主题区域标签”,比如
Rock
90s
Asian
?祝你好运。@Shelleter我是说
TagOne
TagTwo
TagThree
。。这些真正的标签显然不是真正的标签。我把它们分为快速、慢速、声音、动作等。是的,
标签对所有人来说都是通用的,所以你必须对
一个
二个
三个
,这没有太多意义。感谢您的澄清,但我认为您需要更改Q以匹配一些实际标记值的示例。祝你好运,胡<代码>标签=$(echo“Rock,World-SongTitle-Exploration.mp3”| grep-Eo“^[^-]*”| sed's/,/\n/g');echo“$tags”
工作正常。注意
$tags
引用周围的引号:如果不使用它们,bash将删除换行符