繁体   English   中英

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

[英]How to extract specific parts of the path and filename in linux

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

所以我有几个目录,例如: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 find . | grep png | something sed | sort | uniq > indentifiers.txt

但是,我被困在sed部分。 同样,欢迎提出任何建议来做我想做的事情。

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

对不起,我不能得到完整的测试-我在工作和停留在OSX,里面有奇怪的sed问题。 无论如何,解决方案的核心(使用-name测试进行find-u标志进行sort )是sed正则表达式。 您似乎有能力,但是如果有人发现它,我将解释整个过程:

s - Search and Replace
  # - Delimiter (Search pattern)
    ^ - Beginning of a line
    . - Any character
    * - zero or more times
    / - a literal '/'
    \( - start a capturing group
      [^/]* - Any character except '/', zero or more times
    \) - End capturing group (#1)
    / - a literal '/'
    \( - start a capturing group
      [^/.]* - Any character except '/' or '.', zero or more times
    \) - End capturing group (#2)
    \. - a literal '.'
    [0-9] - a digit
    \+ - one or more times
    \.png - a literal '.png'
    $ - end of the line
  # - Delimiter, now starting the replace pattern
    \1 - the contents of the first capturing group
       - a space
    \2 - the contents of the second capturing group
  # - Delimiter.  End of all patterns.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM