繁体   English   中英

递归查找包含所有给定模式的文件

[英]Recursively find files that contain all the given patterns

我有一个目录/ Folder1 / Folder2,其中包含多个项目和多个文件。 某些文件的扩展名为“ .ext”。

一些“ .ext”文件具有“ Word1”,另一些“ .ext”文件具有“ Word2”,其他文件具有“ Word3”。

我想知道如何在我的目录中仅查找包含“ Word1” “ Word2” “ Word3”(这三个词)的“ .ext”文件。

使用find命令可以过滤文件。

find /Folder1/Folder2  -iname "*.ext" -exec grep -i 'Word1' {} \;

grep

grep -inR "Word1" --include \*.ext /Folder1/Folder2 
grep -inR "Word2" --include \*.ext /Folder1/Folder2
grep -inR "Word3" --include \*.ext /Folder1/Folder2

但是,如何结合使用grep命令?

下一个解决方案对我不起作用。

find /Folder1/Folder2 -iname "*.eXt" | xargs grep 'Word1' -sl | xargs grep 'Word2' -sl| xargs grep 'Word3' -sl

编辑1

我发现了&我正在测试:

find /Folder1/Folder2 -iname "*.ext" -exec grep -qi 'Word1' {} \; -exec grep -qi 'Word2' {} \; -print
find /Users/joseluisbz/Google\ Drive/Developer/a\ TableCellRenderer  -iname "*.java" -exec grep -qi 'UI' {} \; -exec grep -qi 'Slider' {} \; -print

结果

joseluisbz-MacBook:~ joseluisbz$ find /Users/joseluisbz/Google\ Drive/Developer/a\ TableCellRenderer  -iname "*.java" -exec grep -qi 'UI' {} \; -exec grep -qi 'Slider' {} \; -print
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/ChangeLafAtRuntineDemo.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/ChangeLafAtRuntineDemo.new.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/ChangeLafAtRuntineDemoOld.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/ColorThumbJSlider.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/JFr_SplitPaneMotif.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/JLayeredPaneJSliderLAF.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/JSliderLAF.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/JSliderTableExample.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/RedGreenSliderUI.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/TestMultiSlider.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/TestSliderLayeredPane.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/UIManagerDefaults.java

检查另一种方法!

$ while IFS= read -d '' -r file; do     grep -q 'UI' "$file" &&      grep -q 'Slider' "$file";     echo "$file"; done < <(find /Users/joseluisbz/Google\ Drive/Developer/a\ TableCellRenderer -iname '*.java' -print0)
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/AnotherPanelInTable.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/AnotherSeparatorSample.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/AutoCompleteComboBox.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/ButtonGroupExample.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/ChangeLafAtRuntineDemo.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/ChangeLafAtRuntineDemo.new.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/ChangeLafAtRuntineDemo.oldWorking.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/ChangeLafAtRuntineDemoOld.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/ClientServerShort.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/ClientServerTCP.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/ColorComboBoxEditor.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/ColorComboBoxEditorRendererDemo.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/ColorEditor.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/ColorRenderer.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/ColorThumbJSlider.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/ComboBoxCustomScroller.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/CustomImageButton.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/CustomJComboBox/src/net/codejava/swing/combobox/CountryComboBox.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/CustomJComboBox/src/net/codejava/swing/combobox/CountryItemEditor.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/CustomJComboBox/src/net/codejava/swing/combobox/CountryItemRenderer.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/CustomJComboBox/src/net/codejava/swing/combobox/CustomComboBoxTester.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/CustomRendererEditorTableExample.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/DecimalSpinner.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/EjemploJLayeredPane.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/FloatSlider.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/JA_JButton/src/JF_Test.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/JButtonTableExample.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/JFr_SplitPaneMotif.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/JInteractiveTableExample.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/JLayeredPaneJSliderLAF.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/JPopupMenuTest.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/JRadioButtonTableExample.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/JSliderLAF.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/JSliderTableExample.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/JSpinnerTableExample.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/JTabbedText.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/LAFJButton.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/LayeredPaneDemo.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/LayeredPaneDemo2.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/LayeredPaneLayout.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/ListDemo.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/NullPointerExceptionSynthTableUI.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/OverlapLayout.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/PopupJOptionPane.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/RedGreenSliderUI.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/SeparatorExample.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/SimpleLayers.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/SliderSample.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/TableDialogEditDemo.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/TableJButtonSelfWork.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/TableTestCheckBox.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/TableWithPanelContainerOfSpinnerAndRadioButton.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/TableWithPanelContainerOfSpinnerAndRadioButton.new.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/TestComboScroll.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/TestMultiSlider.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/TestSliderLayeredPane.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/TransparentBackgroundSlider.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/TransparentSlider.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/UIManagerDefaults.java
/Users/joseluisbz/Google Drive/Developer/a TableCellRenderer/UsingJLayeredPane.java
joseluisbz-MacBook:~ joseluisbz$ 

您可以使用以下find命令查找所有*.ext文件,然后使用grep命令搜索3个单词:

while IFS= read -d '' -r file; do
    grep -q 'Word1' "$file" && 
    grep -q 'Word2' "$file" &&
    grep -q 'Word3' "$file" &&
    echo "$file"
done < <(find /Folder1/Folder2 -iname '*.ext' -print0)

如何在我的目录中仅查找包含“ Word1”和“ Word2”和“ Word3”(这三个词)的“ .ext”文件

找到 + awk “ hack”:

find /Folder1/Folder2 -iname "*.ext" | xargs awk -v RS= '$0~/Word1/ && $0~/Word2/ && $0~/Word3/{print FILENAME}'

  • -v RS= -将每个文件内容视为一行

  • '$0~/Word1/ && $0~/Word2/ && $0~/Word3/{print FILENAME} -将仅打印包含所有三个单词的文件名

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM