我需要知道这将做什么:(grep& xargs)

时间:2013-01-17 19:45:58

标签: bash grep xargs

以下是该行:

find /localdir/ | grep '[0-9']$ | xargs -i% cp % /tftpboot

我特别想知道grep在这里正在寻找什么。
有人可以为我翻译吗?

我也对xargs cmd的样子感兴趣......

提前致谢。

1 个答案:

答案 0 :(得分:4)

[0-9]表示09中的任何字符。 $表示一行的结尾。因此,grep会找到以数字结尾的任何行(即文件名),xargs会将每个行复制到/tftpboot

当然,如果这些文件名中的任何一个包含空格,您会有一些惊喜。您可以在zsh中的shell中完全执行此操作(并且我认为在最新版本的bash中):

cp /localdir/**/*[0-9] /tftpboot

附录:如果你问的是有趣的引用,工作,虽然它不是非常人性化。

关键是你可以在shell中将引用的字符串和非引用的字符串紧挨着,它们将成为一个字符串; echo "fo"ob'ar'将生成foobar

引用第一部分是因为[对bash特殊。 ]也很特别,但由于bash从未见过特殊的(未引用的)[,因此只留下]$通常会替换变量,但后面没有任何内容,所以bash也会单独留下它。

实际传递给grep的字符串仍为[0-9]$