使用 Bash 中给定路径中存在的目录列表填充数组
Populate an array with list of directories existing in a given path in Bash
我有一个目录路径,其中有多个文件和目录。
我想使用基本 bash 脚本创建一个仅包含目录列表的数组。
假设我有一个目录路径:
/my/directory/path/
$ls /my/directory/path/
a.txt dirX b.txt dirY dirZ
现在我只想用目录填充名为 arr[]
的数组,即 dirX
、dirY
和 dirZ
。
有一个 post,但它与我的要求不太相关。
任何帮助将不胜感激!
尝试:
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
试试这个:
#!/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
的答案不同,这不会被包含空格、通配符等的目录名称混淆
我有一个目录路径,其中有多个文件和目录。
我想使用基本 bash 脚本创建一个仅包含目录列表的数组。
假设我有一个目录路径:
/my/directory/path/
$ls /my/directory/path/
a.txt dirX b.txt dirY dirZ
现在我只想用目录填充名为 arr[]
的数组,即 dirX
、dirY
和 dirZ
。
有一个 post,但它与我的要求不太相关。
任何帮助将不胜感激!
尝试:
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
试试这个:
#!/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
的答案不同,这不会被包含空格、通配符等的目录名称混淆