【问题标题】:Looping through alphabets in Bash在 Bash 中循环遍历字母
【发布时间】:2011-11-10 03:12:45
【问题描述】:

我想mv所有以'x'开头的文件到目录'x';类似:

mv path1/x*.ext path2/x

对所有字母 a, ..., z 都这样做

如何编写一个 bash 脚本,让 'x' 在字母表中循环?

【问题讨论】:

    标签: bash loops for-loop


    【解决方案1】:

    这应该让你开始:

    for letter in {a..z} ; do
      echo $letter
    done
    

    【讨论】:

      【解决方案2】:
      for x in {a..z}
      do
          echo "$x"
          mkdir -p path2/${x}
          mv path1/${x}*.ext path2/${x}
      done
      

      【讨论】:

      • 请问为什么在第 4 行和第 5 行用大括号将 x 括起来?
      • 这里不是必需的,但是很好,它可以工作,并且使参数更加突出;)gnu.org/software/bash/manual/…
      • 通常"$x" 就足够了,而且是让它脱颖而出的更好方法。
      • @WeijunZhou 如果您想扩展变量 x 后跟字母 'y' 和 'z',这将是一个问题。如果您尝试扩展 "$xyz",解释器会认为您正在尝试打印一个名为 xyz 的变量,而 "${x}yz" 会让解释器确切知道您要做什么
      • 我的意思是"$x"yz
      【解决方案3】:

      这是使用嵌套大括号扩展生成西班牙字母表的方法

      for l in {{a..n},ñ,{o..z}}; do echo $l ; done | nl
      1  a
       ...
      14  n
      15  ñ
      16  o
      ...
      27  z
      

      或者干脆

      echo -e {{a..n},ñ,{o..z}}"\n" | nl
      

      如果要生成obsolete 29 个字符的西班牙字母表

      echo -e {{a..c},ch,{d..l},ll,{m,n},ñ,{o..z}}"\n" | nl
      

      法文字母或德文字母也可以这样做。

      【讨论】:

      • 避免拆分字母的丑陋替代方案:for j in $(for i in $(echo {a..z} ñ ch ll ); do echo $i; done| sort | xargs); do echo "Hello-$j"; done
      【解决方案4】:

      使用rename

      mkdir -p path2/{a..z}
      rename 's|path1/([a-z])(.*)|path2/$1/$1$2' path1/{a..z}*
      

      如果您想从文件名中去除前导 [a-z] 字符,更新后的 perlexpr 将是:

      rename 's|path1/([a-z])(.*)|path2/$1/$2' path1/{a..z}*
      

      【讨论】:

        【解决方案5】:

        也是大写的

        for letter in {{a..z},{A..Z}}; do
          echo $letter
        done
        

        【讨论】:

          【解决方案6】:

          这个问题和答案对我的问题有所帮助。
          我需要在 bash 中放大字母表的一部分

          虽然扩展is strictly textual

          I found a solution: 并让它变得更加简单:

          START=A
          STOP=D
          for letter in $(eval echo {$START..$STOP}); do
              echo $letter
          done
          

          结果:

          A
          B
          C
          D
          

          希望它对寻找我必须解决的相同问题的人有所帮助, 也在这里结束

          【讨论】:

            【解决方案7】:

            我希望这会有所帮助。

            对于 {a..z} 中的 i

            因为我在 {A..Z}

            对于我在 {{a..z},{A..Z}}

            根据需要使用循环。

            【讨论】:

            • 其他答案已经涵盖了这一点。请不要添加重复项,或解释您的答案比以前的答案更好。
            猜你喜欢
            • 2012-05-24
            • 1970-01-01
            • 2022-01-16
            • 2015-01-04
            • 1970-01-01
            相关资源
            最近更新 更多