我对Unix命令很陌生,对你们这些人来说这可能是非常直观的,所以请原谅我的无知。
我想要的是找到包含其他子文件夹和文件的文件夹中的所有.txt文件。使用找到的列表,它应该只是文件名和扩展名(没有完整路径),我需要搜索另一个文件夹中的所有.xml文件(也有子文件夹和文件,并且是第一个搜索文件夹的父文件)在第一次搜索中找到的文件名的出现。
希望这很清楚!
我尝试过这个并没有用(我知道,这绝对是初学者的尝试):
find . -name "*.txt" -printf "%f\n" -exec find .. -name "*.xml" | xargs grep {} \;
答案 0 :(得分:1)
也许是这样的(未经测试):
find . -name "*.txt" -printf "%f\n" > /tmp/a
find . -name "*.xml" -exec grep -HFf /tmp/a {} \;
也可以添加-w
以进行单词分隔搜索。
进程替换的另一种尝试:
find . -name "*.xml" -exec grep -HFf <(find . -name "*.txt" -printf "%f\n") {} \;
答案 1 :(得分:0)
这是你正在寻找的吗?
find . -name \*.txt -exec basename {} .txt \; | while read file; do grep -l "\<${file}\>\.txt" /path/to/*.xml && echo "found: $file"; done
请注意,如果文件名中包含空格,换行符等特殊字符,则此解决方案存在破坏的风险。