这是行:
find /localdir/ | grep '[0-9']$ | xargs -i% cp % /tftpboot
我特别想知道 grep 究竟在这里寻找什么。
谁能帮我翻译一下?
我也对 xargs cmd 的外观感兴趣...
提前致谢。
[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]$
.