【发布时间】:2013-10-06 04:26:34
【问题描述】:
所以我有一个作业问题,要求我在一个目录中搜索所有 .mp3 文件,这些文件的命名约定类似于:
Beatles - Lucy in the Sky with Diamonds.mp3
然后,我需要将它的格式类似于:
Beatles/Lucy in the Sky with Diamonds.mp3
我对 UNIX 很陌生,但我对基本概念有很好的掌握。
我知道如何“去除”文件名的扩展名(所以“披头士乐队 - 带钻石的天空中的露西”会留下)。
我也知道如何搜索目录中的所有文件。
但是,我不熟悉如何搜索“-”。
我知道在 C++ 等中我可以搜索特定的 char ("-") 并获取该 int 并创建子字符串,但我不知道 UNIX 中的任何此类函数。
我不是在寻找完整的代码来完全回答这个问题,但我想知道如何搜索字符和编辑文件名。
谢谢。
编辑:
使用 nosid 所说的,我设法让文件名在艺术家和歌曲标题之间分开,如下所示:
artist="${originalFile%% - *}"
song="${originalFile#* - }"
所以这部分工作并将它们分开,但是当我尝试移动文件时出现了一个新问题。我有 2 个 if 语句来检测目录是否存在,如果不存在,它将创建该目录。但是,如果我使用艺术家变量作为目录名称,它将创建 2 个目录。使用歌曲也是如此。
所以本质上,当我尝试类似这样的 mkdir 或 mv 时,我怎样才能让它忽略文件/目录名称中的空格:
mkdir ${artist};
mv ${artist}/${song};
【问题讨论】:
-
谷歌“bash tr”、“bash grep”、“bash awk”、“bash for loops”,您会发现大量有关如何执行此操作的信息。
-
您必须在变量周围使用引号,即
"$artist"而不是${artist}。请不要编辑问题以询问其他内容。提出一个新问题并首先搜索类似的问题。