terminal命令:处理filename中的特殊字符

时间:2016-11-06 12:58:46

标签: swift bash shell character filenames

我想在终端中执行一些命令。我在Swift 3.0中创建它们并将它们写入命令文件。但是一些特殊字符会产生问题,例如单引号:

mv 'Don't do it.txt' 'Don_t do it.txt'

我使用单引号来涵盖其他特殊字符。但是单引号本身是什么呢?如何以一种可以正确处理每个可能的文件名的方式转换它们?

1 个答案:

答案 0 :(得分:1)

你的问题很奇怪:

  1. 在这种情况下,我们将写入shell脚本而不是文本文件

  2. 您正在替换输出文件名中的单引号,但不替换空格, 哪个应该被替换

  3. 这是一个解决方案,可以正确地转义输入文件 替换(读取:空格)输出文件:

    #!/usr/bin/awk -f
    BEGIN {
      mi = "\47"
      no = "[^[:alnum:]%+,./:=@_-]"
      print "#!/bin/sh"
      while (++os < ARGC) {
        pa = split(ARGV[os], qu, mi)
        printf "mv "
        for (ro in qu) {
          printf "%s", match(qu[ro], no) ? mi qu[ro] mi : qu[ro]
          if (ro < pa) printf "\\" mi
        }
        gsub(no, "_", ARGV[os])
        print FS ARGV[os]
      }
    }
    

    结果:

    #!/bin/sh
    mv 'dont do it!.txt' dont_do_it_.txt
    mv Don\''t do it.txt' Don_t_do_it.txt
    mv dont-do-it.txt dont-do-it.txt