如何遍历目录和子目录并获取父目录的名称?

时间:2019-02-22 04:53:13

标签: bash shell

我正在遍历文件夹并查找具有特定文件扩展名的文件夹。根据查找结果,我得到的目录路径为-

例如

  

./ Config / SysMapping.txt

     

./ Config / exclusion_list_old.txt

我只想取一个名字:

  

配置

并删除

  

./

之前

  

配置

以及Config之后的所有内容,即

  

/SysMapping.txt

3 个答案:

答案 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循环。