2

Я пытаюсь найти конкретную строку из нового файла, который у меня есть в подпапках. Файлы имеют одинаковые имена. Итак, структура похожа на:

  • скоросшиватель
    • SubFolder1
      • filename.xml
    • SubFolder2
      • filename.xml

Я использую grep чтобы получить строку

grep -r "mySubString" folder/

Я пытаюсь использовать find для сортировки файлов, как предложено здесь. Но я не знаю, как объединить оба, чтобы получить только строку из новейшего файла.

Спасибо за вашу помощь.

2 ответа2

1
find . -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "

Это вернет последний файл, созданный из каталога, из которого вы запускаете эту команду, и всех подкаталогов. Если вы хотите, так искать в определенном каталоге chane . к пути к каталогу.

поискать содержимое этого файла:

cat `find . -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "` | grep "mySubString"

Изменить: я не уверен. Я попробовал это сам быстро, и это сработало. Я создал тестовый файл и использовал эту команду. Это сработало для меня. Если есть проблема, пожалуйста, дайте мне знать.

1

ЗШ:

grep pattern **/*(.om[1])

om заказы по дате изменения . является классификатором для обычных файлов.

GNU find:

grep pattern "$(find -type f -printf '%T@ %p\n'|sort -n|tail -n1|cut -d' ' -f2-)"

%T@ - время модификации, а %p - путь.

BSD:

grep pattern "$(find . -type f -exec stat -f '%m %N' {} +|sort -n|tail -n1|cut -d' ' -f2-)"

%m - время модификации, а %N - путь.

Баш 4:

shopt -s globstar;grep pattern "$(ls -dt **|head -n1)"

Это включает в себя каталоги и может привести к слишком длинной ошибке списка аргументов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .