首页 > Linux Manger, Tips > shell遍历目录时候的空格处理问题

shell遍历目录时候的空格处理问题

17:17:37,周五,九月23,2011 1,241 阅读 发表评论 阅读评论

之前说过 用find的-print0和xargs的-0参数可以很好的处理目录空格问题,但是xargs要实现复杂的指令就有点困难了,难道一定要外部执行一个脚本么。
比如我需要处理一个目录下的如下文件

# tree
.
├── aa bb
│   └── a b.txt
├── cc dd
│   ├── jjll.txt
│   └── qq mm.txt
└── eeff
    ├── hi hi.txt
    └── hi.txt

3 directories, 5 files

cat其内容进行grep筛选后写入该目录类以源文件名加YD后缀的新文件名内

尝试用for 循环实现

for files in `find ./ -type f -name "*.txt"`
do
echo $files
done

结果给出了这样的输出

./aa
bb/a
b.txt
./cc
dd/jjll.txt
./cc
dd/qq
mm.txt
./eeff/hi.txt
./eeff/hi
hi.txt

可见for把空格认为是换行 导致都位了

网上搜索了下,说是要修改IFS

old_IFS=$IFS
IFS=$(echo -en "\n\b")
for files in `find ./ -type f -name "*.txt"`
do
echo $files
done
#用完恢复老的IFS
IFS=$old_IFS

测试了一下 果然可以了
\b指光标回退一格

自己用while read实现了一个 也可以的

find ./ -type f -name "*.txt" |while read line;
do
#for Debug
echo $line
cat "$line" |grep -P '^(13[5-9])|(^18[7|8])|(^15[0-2])|(^182)|(^15[8|9])' >"${line}_YD.txt"
done

实例 批量解压当前目录的rar文件到同名文件夹中

find ./ -type f -name "*.rar" |while read line;
do line=`basename $line`;
mkdir ${line%.*};
unrar x ${line%.*}.rar ${line%.*};
done
Author Info :
  • From:shell遍历目录时候的空格处理问题
  • URL:http://ihipop.info/2011/09/2781.html
  • Please Reserve This Link,Thanks!
    1. 2011年10月1日23:12 | #1

      不是太懂这个~

    1. 本文目前尚无任何 trackbacks 和 pingbacks.