скрипт только выводит одно имя файла из множества в новый файл - PullRequest
1 голос
/ 28 февраля 2020

Я пытаюсь вывести имя каждого файла, в последней строке которого есть "#FIXME", в новый файл.

find -type f -print0 |while IFS= read -rd '' file; do
tail -n1 "$file" | grep -q FIXME && echo "$file" > newlog.log 
done  

В newlog выводится только один файл, содержащий "#FIXME". Журнал, когда на самом деле есть файлы mutliple.
Может кто-нибудь сказать мне, что происходит не так?

Ответы [ 2 ]

2 голосов
/ 28 февраля 2020

У вас есть настройка al oop, которая выполняет эту строку посередине для многих файлов:

tail -n1 "$file" | grep -q FIXME && echo "$file" > newlog.log

Эта строка, однако, каждый раз создает и записывает файл "newlog.log",
, который в результате каждый раз уже существующий контент перезаписывается только одним именем файла. Это создало впечатление, что в файл журнала записано только одно имя файла. Это последний из них.

Чтобы получить список всех записанных имен файлов, т. Е. Чтобы сохранить весь контент, вам нужно добавить существующий журнал, а не перезаписывать его.
Чтобы сделать это, используйте >> вместо >.

tail -n1 "$file" | grep -q FIXME && echo "$file" >> newlog.log

Это создает необходимость учитывать содержимое файла журнала перед выполнением сценария.
Либо у вас все в порядке с всегда также сохраняя содержимое предыдущего выполнения скрипта, что, вероятно, не так, или вы можете убедиться, что файл не имеет содержимого.

Вы можете удалить файл и создать его заново. Или вы один раз используете > намеренно. Это позволит вам создать заголовок для списка, например, содержащий дату создания и путь, по которому вы его выполнили.

1 голос
/ 28 февраля 2020

Вам нужно добавить в файл, а не перезаписать. И это

tail -n1 "$file" | grep -q FIXME && echo "$file" > newlog.log 

должно быть

tail -n1 "$file" | grep -q FIXME && echo "$file" >> newlog.log 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...