java - 复制包含列表中单词之一的文件
问题描述
我面前有大量的代码库。在此我想找到包含类定义的文件(路径)并将文件复制到文件夹中。我有一个类名列表(大约 50 个)要查找。
我试过使用grep
喜欢
cp $(grep --include=\*.java -rl . -e "class SplashScreen" *) --parents -t ./dest-folder
它可以工作,但是通过代码找到一个类也需要很多时间。我可以编写一个循环脚本,尽管每个类名都需要很长时间,而且我不想为每个类手动执行。
有一个更好的方法吗?
解决方案
假设您在文件中有list.txt
一个类名列表(每行一个类名):
MyClass1
MyClass2
MyInterface1
可以处理这个文件来构建一个正则表达式来选择类名并将其存储到一个变量中:
$ 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"
推荐阅读
- r - ggplot2中堆积条形图y方向的更改顺序,如序列所示
- javascript - 嗨,有人可以帮助我处理这个 ReactJS 代码
- javascript - Flask - POST 请求正在发送部分输入值
- git - git 每次拉取时都会生成一个新的 master.lock 文件
- python - 如何使用 Python 合并 JSON 中的数据
- android - Android 生命周期倒置
- storage - 这个计算正确吗?(车复制)
- java - 指定 Kafka Connect 连接器插件版本
- c++ - 试图创建私有成员数组,其大小从 C++ 中的初始化列表给出(
禁止使用) - html - 当显示设置为内联时消失