1

У меня есть скрипт, который wgets файл .txt и изменяет имена.

Я хотел бы проанализировать изменения между самым новым и последним файлом.

Вот как я могу их выбрать:

ls -t -l | awk '{print $9}' | head -n1 | tail -n1 | tr -d ' ' | xargs echo FIRST=
ls -t -l | awk '{print $9}' | head -n2 | tail -n1 | tr -d ' ' | xargs echo SECOND=

Я хотел использовать xargs для подачи экспорта в переменные, а затем просто сделать diff между ними, как

diff $FIRST $SECOND

Но часть экспорта не работает из-за того, как работает xargs.

Я думаю, что весь мой подход неверен.

2 ответа2

1

Изменение вашего подхода очень мало, но получение рабочей версии дает:

first=$(ls -t | head -n1)
second=$(ls -t | head -n2 | tail -n1)
diff "$first" "$second"

Вышеприведенное не будет хорошо работать с именами файлов со встроенными символами новой строки и т.д.  Чтобы снять это ограничение, используйте:

ls -t --quoting-style=shell-always | head -n2 | xargs diff
0

Это будет работать, и будет обрабатывать имена файлов, которые содержат пробелы.

b=`ls -t -1 | head -n2`
first="$(echo "$b" | head -n1)"
second="$(echo "$b" | tail -n1)"
diff "$first" "$second"

Преимущество этого метода заключается в том, что он анализирует список каталогов только один раз, если каталог, в котором вы его используете, содержит много (много тысяч) файлов, это может быть быстрее.

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