簡體   English   中英

復制包含列表中單詞之一的文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM