以下是该行:
find /localdir/ | grep '[0-9']$ | xargs -i% cp % /tftpboot
我特别想知道grep在这里正在寻找什么。
有人可以为我翻译吗?
我也对xargs cmd的样子感兴趣......
提前致谢。
答案 0 :(得分:4)
[0-9]
表示0
到9
中的任何字符。 $
表示一行的结尾。因此,grep
会找到以数字结尾的任何行(即文件名),xargs
会将每个行复制到/tftpboot
。
当然,如果这些文件名中的任何一个包含空格,您会有一些惊喜。您可以在zsh中的shell中完全执行此操作(并且我认为在最新版本的bash中):
cp /localdir/**/*[0-9] /tftpboot
附录:如果你问的是有趣的引用,将工作,虽然它不是非常人性化。
关键是你可以在shell中将引用的字符串和非引用的字符串紧挨着,它们将成为一个字符串; echo "fo"ob'ar'
将生成foobar
。
引用第一部分是因为[
对bash特殊。 ]
也很特别,但由于bash从未见过特殊的(未引用的)[
,因此只留下]
。 $
通常会替换变量,但后面没有任何内容,所以bash也会单独留下它。
实际传递给grep的字符串仍为[0-9]$
。