Как обрабатывать пробелы в именах каталогов, используя 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
как две отдельные директории, 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
как я сделал, чтобы избежать этого сценария.