【问题标题】:strip multiple dashes from filenames recursively递归地从文件名中去除多个破折号
【发布时间】:2013-03-01 07:58:57
【问题描述】:

我想递归地去除包含多个破折号的文件名,以便 file---name-3.jpg 变为 file-name-3.jpg。这在单个文件夹中工作正常,但我想移动到父文件夹并运行命令。它也可以正常工作,直到它遇到一个也有多个破折号的文件夹名称,然后它会尝试重命名它们。

find . -type f -iname '*---*' -depth -exec rename 's/---/-/gi' {} +

parent_folder
  \sub--folder-1
     file--name-1.jpg <-- rename file-name-1.jpg
     file----name-2.jpg <-- rename file-name-2.jpg
  \sub----folder-2
     file--name-1.jpg <-- rename file-name-1.jpg

编辑在 CentOS 服务器上使用 bash

【问题讨论】:

  • 你应该用你正在使用的语言/shell标记你的问题。
  • 我记得使用 sed 来解析最终名称,因为您使用的是“-type f”并且您拥有完整的路径名,请查看此stackoverflow.com/questions/4793892/…

标签: bash rename


【解决方案1】:

使用 -execdir 从文件目录运行命令,只使用文件名,而不是使用 -exec 从当前目录运行命令,并使用相对路径:

find . -depth -type f -iname '*---*' -execdir rename 's/---/-/gi' {} +

【讨论】:

    猜你喜欢
    • 2016-12-06
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 2011-02-12
    相关资源
    最近更新 更多