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