打印不带文件名的目录路径

打印不带文件名的目录路径

我是 Linux 新手,需要帮助。我有一个文件,其中包含文件名列表及其路径。前任:

$ cat /home/user/files.txt

/xyz/abc/xxx/abc.sh
/xyz/nnn/111.dat
/xyz/mmm/yyy/sss/rrr/123.log

如何仅打印目录结构而不打印文件名,请注意目录深度和扩展名都不是恒定的。

/我需要的输出(不需要结尾的斜线)

/xyz/abc/xxx/
/xyz/nnn/
/xyz/mmm/yyy/sss/rrr/

请建议,先谢谢了。

答案1

cat file | while read name; do
   dirname "$name"
done

答案2

如果确定最后一个组件确实是文件名,则可以使用awk

awk -F'/' -v OFS='/' '{$NF=""}1' file.txt

这将使用/as 字段分隔符进行输入和输出,并将最后一个字段(即文件名)设置为空字符串。1规则块的外部指示打印awk该行,包括所有修改。

或者,使用sed

sed -E 's|/[^/]+$|/|' file.txt

将替换模式“一个/后跟任何字符不是斜线一直到行尾” /,从而有效地消除路径的最后部分,即文件名。

相关内容