我想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
它将一次读取一行并将其放入LINE
variables中。 因此,如果找不到空间,这并不重要。 我也把ls包裹起来,防止在那里发生空间混乱