从特定目录中的扩展中查找特定文件

从特定目录中的扩展中查找特定文件

我想从特定目录中找到特定文件名。

另外,我不知道该特定目录中的文件名。我只知道该文件的扩展名,即“.uploaded”。因此,我想使用该 .uploaded 扩展名来查找文件名。

我想要输出中的文件名,而不是特定目录的完整路径,我只想要文件名。

那我该怎么办?

答案1

您可以通过 rev-cut-rev 删除文件路径:

ls dir/*.uploaded | rev | cut -d/ -f1 | rev

答案2

示例目录结构:

$ ls -1 test
a
b.uploaded
c.uploaded
d.uploaded
e

使用find,适合通过 管道传输到另一个命令xargs

$ EXT='.uploaded'; find dir -maxdepth 1 -name "*$EXT" -exec basename {} "$EXT" \;
d
b
c

在shell脚本中,使用basename去除目录和后缀:

$ EXT=".uploaded"; for i in dir/*"$EXT"; do basename -- "$i" "$EXT"; done
b
c
d

在shell脚本中,使用参数扩展:

$ EXT=".uploaded"; for i in dir/*"$EXT"; do i=${i##*/}; printf '%s\n' "${i%$EXT}"; done
b
c
d

请注意,您可能会命中多个文件。您尚未定义要在文件之后发生什么。如果您当然只有一个文件匹配,您可以basename直接使用:

$ rm dir/{b,d}.uploaded
$ basename dir/*.uploaded .uploaded
c

但如果 glob 匹配多个文件,此操作将会失败。

相关内容