Как обрабатывать пробелы в именах каталогов, используя grep

364
user1334007

У меня есть дерево каталогов, где в некоторых каталогах есть пробелы в именах:

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. Как я могу это сделать?

0

1 ответ на вопрос

0
Kamil Maciorowski

Да, эти пространства являются проблемой. Если используемые вами инструменты могут работать со строками с нулевым символом в конце, это так:

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

Этот подход также должен работать в вашем случае:

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

Заметки:

  • Я не знаю, как это sortделает «выходные данные отсортированы по меткам времени файлов». Я просто отлаживаю твою команду.
  • Вы должны цитировать, *.csvкак я сделал, чтобы избежать этого сценария .

Похожие вопросы