如何使用 grep 处理目录名称中的空格

如何使用 grep 处理目录名称中的空格

我有一个目录树,其中一些目录的名称中有空格:

top
|-- subdir 1
    |-- subdir a
        |-- file1.csv
        |-- file2.csv
    |-- subdir b
        |-- file1.csv
    |-- subdir c
        |-- file3.csv

我想编写一个grep命令来递归查找目录结构中的文本,但输出必须根据文件的时间戳进行排序。我得到的结果是这样的:

find . -name *.csv | sort | xargs grep "some text" -0

问题是空间被抛弃了grep,你会得到如下结果

grep:./subdir:没有此文件或目录
grep:1:没有此文件或目录

它被解释subdir 1为两个单独的目录,subdir1。我该怎么做呢?

答案1

是的,这些空格就是问题所在。如果您使用的工具可以处理以空字符结尾的字符串,则可以采用以下方法:

find . -name "*.csv" -print0 | sort -z | xargs -0 grep "some text"

这种方法也适用于你的情况:

find . -name "*.csv" | sort | xargs -I {} grep "some text" {}

笔记:

  • 我不知道这如何sort使“输出按照文件的时间戳排序”。我只是在调试你的命令。
  • 你需要*.csv像我一样引用以避免这种情形

相关内容