如何使用 UNIX 获取文件名?

发布于 2025-01-05 21:09:48 字数 91 浏览 1 评论 0原文

我需要从目录中获取要在 UNIX 系统上处理的文件的文件名。目录中只有一个文件,并且其名称会动态更改(通过未命名的外部方法)。

请告诉我如何做到这一点。

I need to get a file name from a directory for the file to be processed on my UNIX system. There will be only one file in the directory and its name changes dynamically (by an un-named outside methodology).

Please let me know how this can be done.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

过度放纵 2025-01-12 21:09:48

如果只有一个文件名不以 . 开头,则:

filename="$(ls $directory)"

这将捕获 ls 的输出。由于“一个文件”的限制,即使名称包含换行符、空格、制表符或其他内容,它也是安全的。对于多个文件,解析 ls 的输出是有问题的。

如果您想要路径名,而不仅仅是文件名,您可以使用:

filename=$directory/*

同样,这只是安全的,因为“一个文件”的限制。无法使用它来区分“目录中有一个文件,其名称为 *”和错误情况“目录中根本没有文件”。对于ls,如果字符串为空,则表示没有文件。

如果文件名可能以 . 开头,那么情况会变得更加困难;您可能会使用:

filename=$(cd $directory; basename "$(find . -type f)")

再说一遍,这只是因为“一个文件”的限制而安全。如果可能有多个文件,则需要使用其他技术。

If there's only one file name that doesn't begin with a ., then:

filename="$(ls $directory)"

This captures the output of ls. Because of the 'one file' limitation, it is safe even if the name contains newlines, spaces, tabs, or whatever. With multiple files, parsing the output of ls is problematic.

If you want the pathname, rather than just the filename, you can use:

filename=$directory/*

Again, this is only safe because of the 'one file' limitation. It is not possible to use this to distinguish between 'there is one file in the directory and its name is *' and the error case 'there are no files in the directory at all'. With ls, if the string is empty, there is no file.

If the file name might start with ., then life is a lot harder; you probably use:

filename=$(cd $directory; basename "$(find . -type f)")

Once more, this is safe only because of the 'one file' limit. If there might be multiple files, you need to use other techniques altogether.

眼泪也成诗 2025-01-12 21:09:48
for fn in *
do
  filename="$fn"
done
for fn in *
do
  filename="$fn"
done
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文