【问题标题】:How to extract the directory from full file path如何从完整文件路径中提取目录
【发布时间】:2021-08-19 09:31:48
【问题描述】:

我有以下脚本,它打印各种文件统计信息,由另一个用户 (choroba) (link) 提供。

有没有办法可以修改为只报告每个文件的目录名而不是文件名的完整文件路径?我尝试使用 dirname 更改文件路径,但出现一系列错误,提示没有此类文件或目录。感谢您的建议。

#!/bin/bash
set -eu

filepath=$1
qfilepath=${filepath//\\/\\\\}   # Quote backslashes.
qfilepath=${qfilepath//\"/\\\"}  # Quote doublequotes.

file=${qfilepath##*/}            # Remove the path.

stats=($(stat -c "%s %W %Y" "$filepath"))
size=${stats[0]}
ctime=$(date --date @"${stats[1]}" +'%d/%m/%Y %H:%M:%S')
mtime=$(date --date @"${stats[2]}" +'%d/%m/%Y %H:%M:%S')

md5=$(md5sum < "$filepath")
md5=${md5%% *}                   # Remove the dash.

printf '"%s","%s",%s,%s,%s,%s\n' \
        "$file" "$qfilepath" "$size" "$ctime" "$mtime" $md5

【问题讨论】:

  • 我尝试使用 dirname 更改文件路径:在发布的代码中,dirname 的调用在哪里?

标签: linux bash dirname


【解决方案1】:

您可以使用dirnamebasename 的组合,其中:

dirname 将从完整路径中删除最后一个组件;

basename 将从路径中获取最后一个组件。

总结一下:$(basename $(dirname $qfilepath)) 会给你路径中最后一个目录的名称。 或者,对于没有文件名的完整路径 - 只需 $(dirname $qfilepath)

【讨论】:

    【解决方案2】:

    虽然我在脚本 sn-p 中没有看到任何会生成递归列表的内容,但您可以通过添加 dir=$(dirname $filepath) 并修改您的 printf 输出以使用 $dir 而不是 $file 来获得目录名称输出。

    【讨论】:

      猜你喜欢
      • 2010-10-15
      • 2011-09-01
      • 1970-01-01
      • 2011-01-02
      • 2014-02-09
      • 2010-10-14
      • 1970-01-01
      • 2015-01-21
      相关资源
      最近更新 更多