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

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

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

3 directories, 5 files[/text]
cat其内容进行grep筛选后写入该目录类以源文件名加YD后缀的新文件名内

尝试用for 循环实现

[bash]for files in find ./ -type f -name "*.txt"
do
echo $files
done[/bash]
结果给出了这样的输出

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

网上搜索了下,说是要修改IFS
[bash]old_IFS=$IFS
IFS=$(echo -en "\n\b")
for files in find ./ -type f -name "*.txt"
do
echo $files
done
#用完恢复老的IFS
IFS=$old_IFS
[/bash]
测试了一下 果然可以了
\b指光标回退一格

自己用while read实现了一个 也可以的
[bash]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[/bash]

实例 批量解压当前目录的rar文件到同名文件夹中
[bash]find ./ -type f -name "*.rar" |while read line;
do line=basename $line;
mkdir ${line%.*};
unrar x ${line%.*}.rar ${line%.*};
done[/bash]

Author Info :
  • From:shell遍历目录时候的空格处理问题
  • URL:https://blog.ihipop.info/2011/09/2781.html
  • Please Reserve This Link,Thanks!
  • 《shell遍历目录时候的空格处理问题》上有1条评论

    发表评论

    您的电子邮箱地址不会被公开。 必填项已用*标注