如何处理脚本中的空格

我想find我的外部光盘上的某些文件,并删除这些。 我创build了下面的脚本(testing我只用ls $ i来检查输出)

for i in `find /media/My\ Book/ -name "OP_CACHE.IDX" -print`; do ls $i; done 

问题是,查找命令只返回string空白(例如“我的书”)没有编码(如我在/媒体/我\书),因此我得到的错误,无法find文件夹。

我怎样才能解决这个问题的空白? 有没有find的标志,或什么?

问候马克

有一个find标志,它是这样使用的:

 find“/ media / My Book”-name“OP_CACHE.IDX”-exec ls {} \; 

这也可以使用:

 find“/ media / My Book”-name“OP_CACHE.IDX”-print0 |  xargs -0 ls 

-print0参数告诉find以空字节分隔文件名,而不是换行符。在大多数现代文件系统(例如ext3和NTFS)中,文件名不仅可以包含空格,还可以包含换行符,制表符,除了空字节以外的所有内容。对于你自己的磁盘是不太可能有这样的文件名,我倾向于小心。)


如果你打算稍后删除文件, find也可以这样做:

 find“/ media / My Book”-name“OP_CACHE.IDX” - 删除 

(甚至可以使用-print -delete查看每个文件被删除的情况。)


如果你绝对必须使用一个bash循环,这将在大多数情况下工作:

 find“/ media / My Book”-name“OP_CACHE.IDX”| 同时读取文件; 做
   ls“$ file”
 DONE 

但请参阅上面关于-print0的注释。

你应该把你的find插入, while read

 find ... | while read i 

而不是for ...while read使用,如下所示:

 find .... | while read LINE ; do ls "$LINE" done 

它将一次读取一行并将其放入LINEvariables中。 因此,如果找不到空间,这并不重要。 我也把ls包裹起来,防止在那里发生空间混乱