【问题标题】:How do i strip the full path retaining only the filename?如何剥离仅保留文件名的完整路径?
【发布时间】:2021-09-01 11:31:45
【问题描述】:

我正在使用以下 find 命令递归地列出文件夹中的所有文件并按大小对其进行排序(最大大小在顶部)

find . -not -path '*/\.*' -not -name '*.nfo' -type f -exec du -h {} + | sort -r -h

该命令运行良好,但我需要从每个结果中删除完整路径,仅保留文件名 例如。 Dir/AnotherDir/file.mp4 should be listed as file.mp4

通常当我必须在 find 命令中执行此操作时,我只需使用 -printf '%f\n' 但这不能在我当前的命令中使用,因为文件正在由 du 命令打印

【问题讨论】:

  • basename:打印 NAME 并删除所有前导目录组件
  • 我知道这个命令,但它如何与 du 命令一起使用?
  • 或将输出通过管道传送到 sed:... | sed -e 's@.*/@@'

标签: linux bash shell find du


【解决方案1】:

只需对数据进行后处理:

find ... | sort ... | sed -E 's@[[:space:]].*/@ @'

... | awk '{printf "%s\t%s\n", $1, $NF}' FS='\t\|/'

【讨论】:

  • 您好,我刚刚尝试了这个解决方案,但是除了目录结构之外,它还去掉了 du 命令在每行开头添加的大小。你能不能让你的 sed 命令不触及尺寸信息
  • 可能最容易匹配空格。已编辑。
  • 当然,现在您必须担心文件名中的空格,因此可能更容易匹配硬制表符。但是,处理任何文件名中的换行符都会非常困难,所以真的不值得担心空格。
猜你喜欢
  • 2012-03-10
  • 2012-09-14
  • 1970-01-01
  • 2020-12-19
  • 2012-03-29
  • 2022-01-18
  • 1970-01-01
  • 2018-03-01
  • 2011-02-26
相关资源
最近更新 更多