l0b*_*0b0 10 unix shell escaping find
find将文件名开头的短划线解释为选项的开头.使用熟悉的--技巧不起作用,因为选项在文件名之后,引用无效,并且替换第一个破折号\-也不起作用.通常鼓励用户在这些文件名之前./,但如果我不知道给定路径是绝对路径还是相对路径,我该怎么办?
编辑:一个解决方案是find "$(readlink -f -- "$test_filename")",但它很难看.有更好的想法吗?
编辑2:感谢您的建议.以下是这项工作产生的两个脚本: safe-find.sh ; safe-count-files.sh
如果它在脚本中,您可以随时检查它.例如bash,ksh或zsh:
if [[ "$DIR" = -* ]]; then
find ./"$DIR"
else
find "$DIR"
fi
Run Code Online (Sandbox Code Playgroud)
以更简洁的形式(对于bash,ksh93或zsh):
find "${DIR/#-/./-}"
Run Code Online (Sandbox Code Playgroud)
您甚至可以使用脚本的参数执行此操作,如果它们都应该是目录:
find "${@/#-/./-}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1992 次 |
| 最近记录: |