我正在遍历文件夹并查找具有特定文件扩展名的文件夹。根据查找结果,我得到的目录路径为-
例如
./ Config / SysMapping.txt
./ Config / exclusion_list_old.txt
我只想取一个名字:
配置
并删除
./
之前
配置
以及Config之后的所有内容,即
/SysMapping.txt
答案 0 :(得分:4)
这将提取arr.names.length + arr.phones.length + arr.clothesBrands.length
之后的第一个路径元素,并删除重复项:
./
在bash中,您可以执行以下操作:
echo ./Config/SysMapping.txt | awk -F/ '{print $2}' | sort -u
答案 1 :(得分:2)
dirname <path>
将删除路径末尾的文件。在您的示例中,您将得到./Config
。然后,您可以将其通过管道传输到awk '{ gsub(/^\.\//, ""); print }'
,以删除./
。
答案 2 :(得分:0)
您可以使用globstar
设置:
shopt -s globstar nullglob
files=(**/*.txt)
# if there cannot be newlines in filenames
printf '%s\n' "${files[@]%/*}" | sort -u
# if there can be newlines in filenames
printf '%s\0' "${files[@]%/*}" | sort -zu | tr '\0' '\n'
tr
只是为了在末尾很好地打印目录名。您可以选择以不同的方式处理以空分隔的目录名,例如使用while
循环。