Переменная в команде find установлена ​​на новую переменную в bash

Сегодня я столкнулся с точно такой же проблемой и нашел способ ее решить без необходимости загружать бинарный дистрибутив.

Предполагая, что вы успешно следовали инструкциям в BUILDING.txt, вам нужно только изменить CATALINA_HOME на ${tomcat.source}/output/build и все должно работать просто отлично.

На самом деле, есть файл RUNNING.txt, который специально отмечает:

В качестве альтернативы загрузке бинарного дистрибутива, вы можете создать свой собственный из исходного кода Tomcat, как описано в "BUILDING.txt". Вы можете либо

a) Выполнить полную сборку "release" и найти созданный дистрибутив в каталоге "output/release" и затем продолжить распаковку, как описано выше, или

b) Сделать простую сборку и использовать каталог "output/build" в качестве "CATALINA_HOME". Имейте в виду, что существуют некоторые различия между содержимым каталога "output/build" и полным "release" дистрибутива.

Ошибка "Could not find or load main class..." возникает, когда CATALINA_HOME установлен в ${tomcat.source}, где нет необходимых сгенерированных классов. Они сохраняются в output/classes после сборки.

1
10.08.2017, 01:43
2 ответа

Выходные данные findне могут быть надежно обработаны после -, если вы не используете -print0вместо -print(-print, подразумеваемого, когда действие не указано ).

Для публикации -обработайте вывод find -print0и сохраните пути к файлам в массиве:

С bash4.4+:

readarray -td '' files < <(find /dir/to/check -mtime "$inputNum" -print0)

В более ранних версиях:

files=()
while IFS= read -rd '' file; do
  files=("${files[@]}" "$file")
done < <(find /dir/to/check -mtime "$inputNum" -print0)

В более общем плане рекомендуется ознакомиться с рекомендациями на странице:Почему зацикливание вывода find является плохой практикой?

2
27.01.2020, 23:33

Если вы можете использовать zsh вместо bash, тогда это намного проще. Zsh может сопоставлять файлы на основе их атрибутов с помощью квалификаторов glob .

files=(/dir/to/check/**/*(Dm$inputNum))

**/*рекурсивный поиск в подкаталогах. Круглые скобки после *содержат квалификаторы glob:Dдля включения точечных файлов и mдля сопоставления файлов на основе времени их модификации в днях, например find -mtime(, вы также можете выбрать другую единицу и установить ограничение по времени, например. (Dmm-$min)действует какfind -mmin -$min).

Zsh предустановлен в macOS. В большинстве других систем unix (, в частности в большинстве дистрибутивов Linux ), он доступен в виде пакета, но не устанавливается по умолчанию.

0
27.01.2020, 23:33

Теги

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