如何在linux中提取路径和文件名的特定部分

时间:2013-05-06 16:50:39

标签: regex bash sed grep

我目前的任务是将多个目录中的大量文件重命名为不同的标识符。

所以我有几个目录,如:b01,b02,b03等。每个目录中都有文件名,如img01.23495.png,img01.3596596.png,img02.2399495.png等。

我必须将b01的img01重命名为其他标识符。因此标识符取决于目录名称和文件名的第一部分。

我对管道的想法是这样的:获取所有png文件名,提取它所在的文件夹,提取img ##部分,并将信息存储到文件中,所以我得到一个类似于的文件:

b01 img01
b01 img02
b02 img01
...

这很有用所以我可以指定新标识符作为第三列的后缀,然后读入文件以执行实际的重命名。

目前,我有路径,例如./images/something/b01/img01.2342394.png。

要获得列表,我目前正在尝试类似的东西 find . | grep png | something sed | sort | uniq > indentifiers.txt

然而,我被困在sed部分。我也欢迎任何有关我正在尝试做的建议。

1 个答案:

答案 0 :(得分:2)

find . -name "*.png" | sed 's#^.*/\([^/]*\)/\([^/.]*\)\.[0-9]\+\.png$#\1 \2#' | sort -u

很抱歉,我无法对此进行全面测试 - 我正在工作并坚持使用OSX,因为它存在奇怪的sed问题。无论如何,解决方案的核心(除了使用-name的{​​{1}}测试和find的{​​{1}}标志)是sed正则表达式。你似乎有一个句柄,但我会解释整个事情以防万一找到它:

-u
相关问题