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