【问题标题】:Bash Script - Replace Last Comma In Folder Names with an &Bash 脚本 - 用 & 替换文件夹名称中的最后一个逗号
【发布时间】:2021-01-19 10:29:38
【问题描述】:

我在编写 Bash 脚本时需要帮助。我希望它通过一个文件夹并重命名所有子文件夹以用&符号替换 LAST 逗号。

for dir in /home/john/Documents/TEST/*; 
do 
    # ***This is the part I can't figure out***
done

假设文件夹是'1234 John, James, Jack' - 我希望它变成'1234 John, James & Jack'

【问题讨论】:

  • 请注意,如果您展示了失败的尝试,这将是一个更强有力的问题,因此我们可以更好地处理您挂断的确切位置以及原因。这几乎是一个“请为我编写代码”的问题,我们对此不以为然。
  • 顺便说一句,您的描述与您的示例数据不太匹配 - 描述说您只想将最后一个逗号 1:1 切换为 & 符号,示例数据说您想要将其替换为 空格后跟 & 符号
  • 用于关闭此问题的重复目标似乎不正确。我正在投票重新提出问题。

标签: linux bash


【解决方案1】:

这是parameter expansion 的合适工作; BashFAQ #100 中还介绍了将它们用于此目的和类似目的的技术。

for f in /home/john/Documents/TEST/*,*/; do  # final / means we match only directories
  f=${f%/}       # remove the last /
  front=${f%,*}  # front is everything before the last comma
  back=${f##*,}  # back is everything after the last comma
  mv -- "$f" "${front}&${back}"
done

https://ideone.com/XcY4rwhttps://ideone.com/XcY4rw的在线 REPL 上查看演示

【讨论】:

    【解决方案2】:
    for dir in /home/john/Documents/TEST/*,*/; 
    do 
        newdir=$(echo "${dir}" | sed 's/\(.*\),/\1\&/')
        mv "${dir}" "${newdir}"
    done
    

    您可以使用 sed 将目录名称中的最后一个逗号替换为 &。

    【讨论】:

    • GNU bash,版本 5.0.3 它运行良好。
    • 请参阅 ideone.com/Jg3wNf 以获取显示问题的在线 REPL。看看它如何将/home/john/Documents/Test/John, 视为与James,Jack/ 分开的参数?
    • @CharlesDuffy 我很抱歉地说:它工作得很好。 we.tl/t-zROk4hieXr(在此处获取测试存档)
    • pastebin.com/q6QJWc41 在这里得到它,最后大致相同
    • 您的abc,abc,abc 测试文件名没有空格。 OP 的 1234 John, James, Jack 确实如此。
    猜你喜欢
    • 1970-01-01
    • 2012-11-26
    • 2012-06-02
    • 2019-10-08
    • 2011-02-09
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多