Как использовать средства bash для получения массива с родительскими каталогами верхнего уровня из другого массива, содержащего перечень измененных файлов в github action?
Для извлечения только названий всех родительских каталогов из массива с путями в bash можно воспользоваться следующим скриптом: ```bash #!/bin/bash paths=("path/to/file1.txt" "folder1/folder2/file2.txt" "folder3/file3.txt") parent_dirs=() for path in "${paths[@]}"; do parent_dirs+=("$(dirname "$path")") done echo "${parent_dirs[@]}" ``` С помощью этого скрипта мы создаем массив `parent_dirs`, в который добавляем только названия родительских каталогов с помощью команды `dirname`. Для получения массива с родительскими каталогами верхнего уровня из другого массива, содержащего перечень измененных файлов в github action, можно воспользоваться следующим скриптом: ```bash #!/bin/bash changed_files=("path/to/file1.txt" "folder1/folder2/file2.txt" "folder3/file3.txt") parent_dirs=() for file_path in "${changed_files[@]}"; do parent_dir=$(dirname "$file_path") while [ "$parent_dir" != "/" ]; do parent_dirs+=("$parent_dir") parent_dir=$(dirname "$parent_dir") done done unique_parent_dirs=($(echo "${parent_dirs[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')) echo "${unique_parent_dirs[@]}" ``` Этот скрипт будет извлекать список всех родительских каталогов для каждого измененного файла, а затем убирать дубликаты с помощью команды `sort -u`.
#!/bin/bash ALL_CHANGED_FILES='[ "monorepo/spfx-packages/news/src/webparts/news", "monorepo/spfx-packages/news/config", "monorepo/spfx-packages/news", "monorepo/spfx-packages/news/src/webparts/news/loc", "monorepo/spfx-packages/alert/src/webparts/alert", "monorepo/spfx-packages/alert/config", "monorepo/spfx-packages/alert", "monorepo/spfx-packages/alert/src/webparts/alert/loc" ]' echo "$ALL_CHANGED_FILES" | sed -rn 's@([^/]+/[^/]+/[^/]+)/.+@\1"@p' | sort -u | sed -r '$!s/.+/&,/'