我正在编写一个脚本,它使用 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)
我这样引用它会忽略文件名中的白色字符