如何使用UNIX获取文件名?

时间:2012-02-15 15:45:34

标签: shell unix filenames ksh

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

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

2 个答案:

答案 0 :(得分:4)

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

filename="$(ls $directory)"

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

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

filename=$directory/*

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

如果文件名可能以.开头,那么生活就更难了;你可能会用:

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

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

答案 1 :(得分:0)

for fn in *
do
  filename="$fn"
done