Grep
grep 和 cp 是否同樣對待“遞歸”?
與.
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
命令,grep -R "find me" *.php
… 包含文件名通配模式,
*.php
. 這將在 shell 執行之前由 shell 擴展grep
,因此執行時的實際命令可能類似於grep -R "find me" file1.php file2.php inc.php
…其中
inc.php
恰好是目錄名稱。然後,該
grep
實用程序將在給定文件中搜尋您提供的表達式。對於命令行中提到的目錄,它將在目錄下的所有文件和子目錄中搜尋內容與表達式匹配的文件。inc.php/subdir/README
這意味著如果該文件包含字元串,您將找到匹配項find me
。簡而言之:根據給定的選項(遞歸地)處理(在其中搜尋匹配的行)命令行上給出的每個名稱。
該
cp
命令在遞歸操作方面的工作方式相同:cp -r inc/* ~/mywork/
shell會將上述命令擴展為類似
cp -r inc/file1 inc/file2 inc/dir1 inc/dir2 /home/myself/mywork/
然後,該
cp
實用程序將針對每個單獨命名的文件或目錄,將該文件或目錄遞歸地複製到目標目錄。簡而言之:根據給定的選項(遞歸地)處理(複製到目的地)命令行上給出的每個名稱。
補充說明:
- 對遞歸搜尋的支持
grep
是一個非標準擴展。- 應該小心處理可能擴展為以破折號開頭的名稱的文件名通配模式,以免與命令行選項混淆。因此,您的
grep
命令更安全地寫成grep -R -- "find me" *.php
或作為
grep -R -e "find me" -- *.php
… where
--
將選項及其參數與非選項操作數分隔開來。您的cp
命令沒有這個問題,因為通配模式保證會擴展到以 string 開頭的內容inc/
。