find
将文件名开头的破折号解释为选项的开头。使用熟悉的--
技巧不起作用,因为选项位于文件名之后,引用无效,并将第一个破折号替换为\-
也不行。通常鼓励用户在此类文件名之前添加./
,但是如果我不知道给定的路径是绝对路径还是相对路径,我该怎么办?
编辑:一种解决方案是find "$(readlink -f -- "$test_filename")"
,但是很丑。还有更好的想法吗?
Edit 2: 谢谢你的建议。以下是由此产生的两个脚本:安全查找.sh https://gist.github.com/716763; 安全计数文件.sh https://gist.github.com/716802
如果它在脚本中,您可以随时检查它。例如。对于 bash、ksh 或 zsh:
if [[ "$DIR" = -* ]]; then
find ./"$DIR"
else
find "$DIR"
fi
更简洁的形式(对于 bash、ksh93 或 zsh):
find "${DIR/#-/./-}"
如果脚本的参数都应该是目录,您甚至可以使用脚本的参数来执行此操作:
find "${@/#-/./-}"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)