【问题标题】:grep -l stil show path to filegrep -l stil 显示文件路径
【发布时间】:2021-12-22 03:45:48
【问题描述】:

我正在编写一个脚本来根据关键字输入从目录/根目录中搜索所有文件。

echo "Enter keyword"
read key
grep -r -l . -e "$key"

如果我搜索"hei",我知道它位于一个名为mem.c 的文件中,它会打印/folder/mem.c,而不仅仅是文件名。我有一些错误的论点还是应该是这样的?

附加问题,有没有办法存储这些文件名,如果关键字匹配,则将它们复制到另一个目录中?或者也许可以循环通过grep找到的文件?

【问题讨论】:

  • 每个帖子最好只问一个问题。如果您想将匹配的文件复制到某处,您将需要它们的路径,而不仅仅是它们的基本名称。您是想在目的地复制相同的子目录层次结构,还是想复制同一目的地目录中的所有文件?如果是后者,您还将处理多个具有相同名称但位于不同子目录中的文件匹配的情况。那你会怎么做?

标签: bash ubuntu


【解决方案1】:

这就是grep -l 所做的:打印匹配文件的路径。如果您只想打印文件的基本名称,您可以将结果通过管道传递给执行此操作的某个命令。示例:

grep -rlZ "$key" . | xargs -0 -n1 basename

将文件名存储在文件中只是重定向的问题:

grep -rlZ "$key" . | xargs -0 -n1 basename > mylist.txt

要将匹配的文件复制到某个位置,您需要它们的路径,而不仅仅是它们的基本名称。假设您想将它们全部复制到同一个destdir 目录并且您没有名称冲突,您可以使用find

find . -type f -exec grep -l "$key" {} \; -exec cp -f {} destdir \;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-30
    • 2017-04-20
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    相关资源
    最近更新 更多