我想从特定目录中找到特定文件名。
另外,我不知道该特定目录中的文件名。我只知道该文件的扩展名,即“.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 匹配多个文件,此操作将会失败。