Как установить переменную окружения JAVA_HOME, которая будет сохраняться при выходе? [дубликат]

Чтобы найти все каталоги * BETA , в которых есть новые файлы ( -mtime -1 ), и сохраните имена этих каталогов в list.txt , попробуйте:

find -type f -path '*BETA/*' -mtime -1 | sed 's|^\./||; s|BETA/.*|BETA|' | sort -u >list.txt

Поскольку ваша цель - создать данные, разделенные новой строкой, в файле list.txt , это должно означать, что вы не ожидаете любой из каталогов или файлов должен иметь имена, которые сами содержат символы новой строки. Если бы это было так, то, конечно, потребовался бы другой формат вывода.

Как это работает

  • find -type f -path '* BETA / *' -mtime -1

    Это находит все новые файлы, у которых есть родительский каталог, где-то в пути, имя которого заканчивается на BETA , когда new определяется соглашениями find для -mtime -1 .

  • sed | ^ \ ./ ||; s | BETA /.* | BETA | '

    Это удаляет начальное ./ из имен файлов, а также удаляет все, что находится после BETA . Результат - имя БЕТА-каталога.

  • sort -u

    Список каталогов, который создает sed , будет иметь дубликаты. Это удаляет дубликаты.

  • > list.txt

    Результат сохраняется в list.txt

Более общее решение

Следующий подход безопасен, даже если в именах каталогов или файлов есть символы новой строки (для этого может потребоваться Инструменты GNU):

find -type f -path '*BETA/*' -mtime -1 -print0 | sed -z 's|^\./||; s|BETA/.*|BETA|' | sort -zu >list.out

Это создает файл list.out , в котором имена каталогов указаны в форме, разделенной нулями. Поскольку символ nul никогда не может появиться в имени файла или каталога, это безопасный подход. Чтобы использовать list.out , вам, конечно, потребуется прочитать его с помощью инструмента, который понимает ввод, разделенный нулями.

4
30.12.2019, 13:20
0 ответов

Теги

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