与. grep
_ cp
也许只是我使用它们的方式不同。
在此,grep
似乎对“递归”的解释与cp
. 那是对的吗?(我的问题)
根据我的问题,在 SO 上浏览这个...
使用包含grep
-matched 字符串的文件:
./file1.js
./file2.php
./inc/file3.js
./inc/file4.php
./inc.php/file5.php
grep -R "find me" *.php
回报:
./file2.php
./inc.php/file5.php
...因为grep
想要匹配包含“.php”的目录和文件
但是,如果我使用cp
递归复制,说:
cp -r inc/* ~/mywork/
将复制“inc”文件夹中的文件以及所有目录等,尽管不是隐藏文件,无论它们的名称中是否包含“inc”。
grep
“递归”的cp
含义是否不同,或者他们是否将“递归”视为相同?有人可以帮助我了解如何以相同的方式解释不同cp
的路径/文件参数吗?grep
你的
grep
命令,... 包含文件名通配模式,
*.php
. 这将在 shell 执行之前由 shell 扩展grep
,因此执行时的实际命令可能类似于...其中
inc.php
恰好是目录名称。然后,该
grep
实用程序将在给定文件中搜索您提供的表达式。对于命令行中提到的目录,它将在目录下的所有文件和子目录中搜索内容与表达式匹配的文件。inc.php/subdir/README
这意味着如果该文件包含字符串,您将找到匹配项find me
。简而言之:根据给定的选项(递归地)处理(在其中搜索匹配的行)命令行上给出的每个名称。
该
cp
命令在递归操作方面的工作方式相同:shell会将上述命令扩展为类似
然后,该
cp
实用程序将针对每个单独命名的文件或目录,将该文件或目录递归地复制到目标目录。简而言之:根据给定的选项(递归地)处理(复制到目的地)命令行上给出的每个名称。
补充说明:
对递归搜索的支持
grep
是一个非标准扩展。应该小心处理可能扩展为以破折号开头的名称的文件名通配模式,以免与命令行选项混淆。因此,您的
grep
命令更安全地写成或作为
... where
--
将选项及其参数与非选项操作数分隔开来。您的cp
命令没有这个问题,因为通配模式保证会扩展到以 string 开头的内容inc/
。