在 unix 中使用 find 来查找奇怪的文件/目录名称

在 unix 中使用 find 来查找奇怪的文件/目录名称

我正在编写一个脚本,它使用 find 来放置目录路径,这是脚本的一部分:

set list = (`find $PATH -type d`)

它工作正常,直到文件或目录名称未命名,例如:

fi@@lename&& or −filename or :−,?!drectoryanem!-

这些特殊字符我无法处理,我将查找脚本更改为:

set list = ("`find $PATH -type d`")

但当我想在下一个脚本中使用列表中的路径时,这些都不起作用:

foreach i ($list:q)
   foreach file (`find "$i" -maxdepth 1 -type f`)
   ....
   end
end

它无法处理这些特殊文件名,因此我收到许多错误,例如 find:

−."!filenda no such filename or directory

答案1

为了管理不寻常的文件名,您需要在它们周围加上引号(“)。但是,看起来您没有find以最有效的方式使用。它的关键部分之一find是它会对那些不常见的文件执行一些操作。被选中所以:

    find . -maxdepth 1 -type f -exec ls -l {} \;

将在找到的每个文件上运行 -exec 之后的所有内容,并将 替换{}为文件名。

另外,如果您使用 FreeBSD 3.2,有些事情会很奇怪 - 它于 1999 年 5 月发布。

答案2

我解决了

事情一定是这样的:

set subor = ("`find "'"$i"'" -type f -maxdepth 1`")

现在它忽略文件名中的所有内容

并在:

foreach j ($subor:q)

我这样引用它会忽略文件名中的白色字符

相关内容