【问题标题】:Shell Script for File name conversion in linuxlinux中文件名转换的Shell脚本
【发布时间】:2014-07-03 00:45:05
【问题描述】:

我对 Unix 还很陌生,很少接触 shell 脚本。我需要想出一个脚本,将文件名从某些字符串值转换为特殊字符。这需要以这样的方式运行,子目录下的所有文件也被重命名。

例如:

来自:abc(GE)xyz(PR).txt 更改 收件人:abc>xyz%.txt

我可以为所有必需的特殊字符设置 if 条件,但我不确定要传递哪些选项以及如何为所有子目录执行此操作。

谢谢, 杰尔

【问题讨论】:

    标签: linux shell unix filenames


    【解决方案1】:

    这是一种方法:

    # given a filename, execute any desired replacements.
    update_name() {
      local orig_name_var=$1
      local dest_name_var=$2
      local orig_name=${!orig_name_var}
      local new_name="$orig_name"
    
      new_name=${new_name//(GE)/">"}
      new_name=${new_name//(PR)/"%"} # repeat for additional substitutions
    
      printf -v "$dest_name_var" "$new_name"
    }
    
    while IFS= read -r -d '' orig_name; do
      update_name orig_name new_name
      [[ $orig_name = $new_name ]] && continue
    
      if ! [[ -e $orig_name ]]; then
        orig_dirname=${orig_name%/*}
        orig_basename=${orig_name##*/}
        update_name orig_dirname new_dirname
        if [[ -e $new_dirname/$orig_basename ]]; then
          # we already renamed the directory this file is in
          orig_name=$new_dirname/$orig_basename
        fi
      fi
      mv -- "$orig_name" "$new_name"
    done < <(find . '(' -name '*(GE)*' -o -name '*(PR)*' ')' -print0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-19
      • 2014-09-26
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2017-11-09
      • 2013-01-05
      • 2016-04-28
      相关资源
      最近更新 更多