linux - while 循环读取命令正在打印位置而不仅仅是文件名 - 这是为什么?

标签 linux bash while-loop

有人可以向我解释为什么当我在下面的脚本中打印 $file_name 变量时,它是否显示位置而不仅仅是文件名?这不一定是坏事,因为我正努力尝试分别打印位置、md5sum 和文件名,但此时我很困惑为什么要打印位置。

这是文本文件:

day19-pgm-am_0946-23_p1_13.mov
day19-pgm-am_0951-23_p1_14.mov
day19-pgm-am_1016-23_p1_19.mov
day19-pgm-am_1021-23_p1_20.mov
day19-pgm-am_1111-23_p1_30.mov

.

#!/bin/bash


file=/location/md5sum.txt


while IFS=, read -ra arr; do
    while IFS= read -r -d '' file_name; do
        md5=($(md5sum "$file_name"))
        printf '%s\n' "$file_name $md5"
    done < <(find . -name "${arr[0]}" -print0)
done<"$file"

这是当前的输出,如您所见,数据显示了文件的相对位置:

./level1/level2/day19-pgm-am_0946-23_p1_13.mov d41d8cd98f00b204e9800998ecf8427e
./level1/day19-pgm-am_0946-23_p1_13.mov d41d8cd98f00b204e9800998ecf8427e
./level1/level2/day19-pgm-am_0951-23_p1_14.mov d41d8cd98f00b204e9800998ecf8427e
./level1/day19-pgm-am_0951-23_p1_14.mov d41d8cd98f00b204e9800998ecf8427e
./level1/level2/day19-pgm-am_1016-23_p1_19.mov d41d8cd98f00b204e9800998ecf8427e
./level1/day19-pgm-am_1016-23_p1_19.mov d41d8cd98f00b204e9800998ecf8427e
./level1/level2/day19-pgm-am_1021-23_p1_20.mov d41d8cd98f00b204e9800998ecf8427e
./level1/day19-pgm-am_1021-23_p1_20.mov d41d8cd98f00b204e9800998ecf8427e
./level1/level2/day19-pgm-am_1111-23_p1_30.mov d41d8cd98f00b204e9800998ecf8427e
./level1/day19-pgm-am_1111-23_p1_30.mov d41d8cd98f00b204e9800998ecf8427e

最佳答案

$file_name 您从 find 获得的是 find 从提供给 find 的目录中找到的文件的相对路径。

你可以这样获取目录和文件名:

directory=`dirname $file_name`
just_filename=`basename $file_name`

并打印这些。

关于linux - while 循环读取命令正在打印位置而不仅仅是文件名 - 这是为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38614555/

相关文章:

linux - 获取 DHCP 服务器的 IP

linux - .NET 5 webapi 示例返回 404,在 Linux 中运行

linux - mv 来自文本板的包含空格和特殊字符的文件

ruby-on-rails - 在 OS X 10.8.5 上安装了 bundler 但 bundle -v 给出了未找到的命令

bash - 一个 awk 命令中的 `and` 和 `or` 的多个条件

linux - 良好的 POSIX 线程编程视频培训

bash - 如何逐行读取文件并用 cat 执行每一行

Javascript:Math.floor(Math.random()*array.length) 没有生成随机数?

java - 在 switch 语句中使用 switch 语句是否可以接受?

java - 难以理解 FOR 和 WHILE 循环