【问题标题】:Renaming directories based on a pattern in Bash根据 Bash 中的模式重命名目录
【发布时间】:2017-06-30 11:39:24
【问题描述】:

我有一个 Bash 脚本,可以很好地重命名符合条件的目录

for name in *\[*\]\ -\ *; do
  if [[ -d "$name" ]] && [[ ! -e "${name#* - }" ]]; then
    mv "$name" "${name#* - }"
  fi
done

目前如果目录看起来像:

user1 [files.sentfrom.com] - Directory-Subject

它重命名目录,并且只重命名目录

Directory-Subject (this could have different type of text)

如何将脚本/搜索条件更改为现在搜索

www.ibm.com - Directory-Subject

并将目录重命名,仅将目录重命名为

Directory-Subject

【问题讨论】:

    标签: regex bash shell rename file-rename


    【解决方案1】:

    一个简单的答案是将*\[*\]\ -\ * 更改为*\ -\ *

    for name in *\ -\ *; do
      if [[ -d "$name" ]] && [[ ! -e "${name#* - }" ]]; then
        mv "$name" "${name#* - }"
      fi
    done
    

    更多信息请阅读globwildcards

    【讨论】:

      【解决方案2】:

      您可以这样编写代码,以便涵盖这两种情况:

      for dir in *\ -\ *; do
        [[ -d "$dir" ]] || continue   # skip if not a directory
        sub="${dir#* - }"
        if [[ ! -e "$sub" ]]; then
          mv "$dir" "$sub"
        fi
      done
      

      在运行脚本之前:

      $ ls -1d */
      user1 [files.sentfrom.com] - Directory-Subject/
      www.ibm.com - Directory-Subject
      

      之后:

      $ ls -1d */
      Directory-Subject/
      www.ibm.com - Directory-Subject/   # didn't move because directory existed already
      

      【讨论】:

        猜你喜欢
        • 2018-04-10
        • 2021-06-08
        • 1970-01-01
        • 2012-02-12
        • 2012-09-12
        • 2014-09-01
        • 2018-12-07
        • 1970-01-01
        • 2012-04-26
        相关资源
        最近更新 更多