我有一个目录树,其中一些目录的名称中有空格:
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
为两个单独的目录,subdir
和1
。我该怎么做呢?
答案1
是的,这些空格就是问题所在。如果您使用的工具可以处理以空字符结尾的字符串,则可以采用以下方法:
find . -name "*.csv" -print0 | sort -z | xargs -0 grep "some text"
这种方法也适用于你的情况:
find . -name "*.csv" | sort | xargs -I {} grep "some text" {}
笔记:
- 我不知道这如何
sort
使“输出按照文件的时间戳排序”。我只是在调试你的命令。 - 你需要
*.csv
像我一样引用以避免这种情形。