Заполните массив списком каталогов, существующих по заданному пути в Bash - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть путь к каталогу, где есть несколько файлов и каталогов.

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

Предположим, у меня есть каталогпуть: /my/directory/path/

$ls /my/directory/path/
a.txt dirX b.txt dirY dirZ

Теперь я хочу заполнить массив с именем arr[] только каталогами, то есть dirX, dirY и dirZ.

Получил один post но это не имеет отношения к моему требованию.

Любая помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Попробуйте это:

#!/bin/bash
arr=(/my/directory/path/*/)    # This creates an array of the full paths to all subdirs
arr=("${arr[@]%/}")            # This removes the trailing slash on each item
arr=("${arr[@]##*/}")          # This removes the path prefix, leaving just the dir names

В отличие от ответа на основе ls, он не будет смущен именами каталогов, которые содержат пробелы, символы подстановки и т. Д.

0 голосов
/ 11 сентября 2018

Попробуйте:

shopt -s nullglob   # Globs that match nothing expand to nothing
shopt -s dotglob    # Expanded globs include names that start with '.'

arr=()
for dir in /my/directory/path/*/ ; do
    dir2=${dir%/}       # Remove the trailing /
    dir3=${dir2##*/}    # Remove everything up to, and including, the last /
    arr+=( "$dir3" )
done
...