[英]Copy files containing one of the word from list
我面前有大量的代碼庫。 在此我想找到包含 class 定義的文件(路徑)並將文件復制到文件夾中。 我有一個 class 名稱列表(大約 50 個)要查找。
我試過使用grep
類的
cp $(grep --include=\*.java -rl. -e "class SplashScreen" *) --parents -t./dest-folder
它可以工作,但是通過代碼找到一個 class 甚至需要花費很多時間。 我可以編寫一個循環腳本,盡管每個 class 名稱都需要很長時間,我不想為每個 class 手動執行。
有一個更好的方法嗎?
假設您在文件list.txt
中有一個 class 名稱列表(每行一個 class 名稱):
MyClass1
MyClass2
MyInterface1
可以處理此文件以構建 select class 名稱的正則表達式並將其存儲到變量中:
$ class_names="$(cat list.txt|tr '\n' '#'|sed 's/#/\\|/g')"
然后你可以使用grep
運行你的腳本,或者你可以使用find
。
$ cp $(find ./src -type f -name "*.java" -exec grep -l "\(class\|interface\) \($class_names\)" {} +) --parents -t ./mydest-dir
或者,沒有臨時變量,最終命令可能如下所示:
$ cp $(find ./src -type f -name "*.java" -exec grep -l "\(class\|interface\) \($(cat list.txt|tr '\n' '#'|sed 's/#/\\|/g')\)" {} +) --parents -t ./mydest-dir
要確保成功復制所需的文件,請使用相同的find
:
$ find ./mydest-dir -type f -name "*.java"
使用-f
定義要應用的模式文件。 您可以在模式中包含正則表達式元字符。
您可以使用shopt -s globstar
以不確定的深度訪問文件名。
如果pats
是您的模式文件的名稱,
shopt -s globstar
cp --parents -t ./dest-folder $( grep -l -f pats **/*.java )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.