zoukankan      html  css  js  c++  java
  • Linux shell脚本 遍历带空格的文件名

    一般的写法是

    for f in `ls ./`

    但是如果文件名中带空格,比如"A B" 那么虽然ls能正确列出,但是for却会把空格当成分隔符 将A,B分别赋给f,导致变成两个文件名

    研究发现问号?在文件名中也可以代表空格。因此可以这样写:

    for f in `ls ./ | tr " " "\?"`

    先将ls的每一行的空格用tr替换为问号。这样的f可以执行mv,cp等操作。echo也能正确将?变成空格显示。要是涉及到字符串操作不爽,反正现在已经在变量里面了可以直接替换回来

    f=`tr "\?" " " <<<$f`

    附上一个将文件名递归改成小写的程序

    #!/bin/sh
    function xx(){
     local oldpwd="$PWD"
     cd $1
     local f=""
     local m=""
     for f in `ls ./ | tr " " "\?"`
     do
      echo $f
     # f=`tr "\?" " " <<<$f`
      if [ -d "$f" ]
      then
       xx "$f"
      fi
      m=`tr '[A-Z]' '[a-z]' <<< "$f" `
      if [ "$f" != "$m" ]
      then
       if [ -e ./"$m" ] 
       then
        echo in $PWD: file $f can\'t be transform since file $m exists
       else
        mv ./"$f" ./"$m"
       fi
      fi
     done
     cd "$oldpwd"
    }
    xx $1

  • 相关阅读:
    链表首尾节点的常规方案
    MYSQL 学习
    卡尔曼滤波
    降维技术
    Hurst指数python实现
    一维GMM的Python代码实现
    对数周期幂率模型(LPPL)
    paper 112:hellinger distance
    paper 111:图像分类物体目标检测 from RCNN to YOLO
    paper 110:凸优化和非凸优化
  • 原文地址:https://www.cnblogs.com/google4y/p/2956086.html
Copyright © 2011-2022 走看看