我有这个命令(KSH)
find <path> -regextype posix-extended -type f -regex '.*/txt' -exec ls -l --full-time \{\} \;
| sort -bnr
所以,到目前为止我正在阅读和破译上面的命令,我所知道的是
-regextype posix-extended
这只是将 regextype 更改为 posix-extend
-type f
这只返回文件
-regex '.*/txt'
这只是正则表达式
-exec ls -l --full-time
执行ls -l --full-time
\\{\\}
这个我不明白。它有什么作用?我所知道的是我需要-exec
以以下结尾{} \;
,但为什么花括号内有反斜杠?
答案1
我所知道的是我需要
-exec
以以下结尾{} \;
,但为什么花括号内有反斜杠?
反斜杠删除了以下字符的特殊含义,如下所示:
$ echo $SHELL
/bin/bash
$ echo \$SHELL
$SHELL
这也是它们在这里所做的,只不过在类似 sh 的 shell 中一{}
开始并不特殊,所以不需要它们。至少在鱼壳中需要它们,其中平原{}
被删除,或者如果您有看起来像 Bash/ksh/zsh 中的大括号扩展的东西,但不想扩展它。 (例如echo \{foo,bar\}
vs echo {foo,bar}
)
答案2
{} 被 find 找到的实体替换。至少在 bash 中,不需要转义 {},因此 a
...-exec ls -l --full-time {} \;
也可以工作。