-3

这是行:

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

我特别想知道 grep 究竟在这里寻找什么。
谁能帮我翻译一下?

我也对 xargs cmd 的外观感兴趣...

提前致谢。

4

1 回答 1

4

[0-9]0表示从到的任何字符9$表示一行的结束。因此,您grep将找到以数字结尾的任何行(即文件名),xargs并将它们分别复制到/tftpboot.

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

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

附录:如果你问的是有趣的引用,那起作用,尽管它不是很人性化。

关键是你可以在 shell 中将带引号的字符串和不带引号的字符串紧挨着放置,它们会变成一个字符串;echo "fo"ob'ar'会产生foobar.

引用第一部分是因为[对 bash 来说是特殊的。 ]也很特别,但由于 bash 从未见过 special (unquoted) [,所以它只剩下一个了]$通常会替换一个变量,但它之后什么都没有,所以 bash 也不管它。

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

于 2013-01-17T19:49:26.413 回答