【问题标题】:How to get file name using UNIX?如何使用 UNIX 获取文件名?
【发布时间】:2012-02-15 15:45:34
【问题描述】:

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

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

【问题讨论】:

    标签: shell unix filenames ksh


    【解决方案1】:

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

    filename="$(ls $directory)"
    

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

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

    filename=$directory/*
    

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

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

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

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

    【讨论】:

    • filename="$(cd $directory && ls -1a | tail -1)" 将为任何给定的文件名获取$directory 中的一个文件名,无论它是否以句点开头。 ls-1 选项为每行提供一个文件名。 (如果有人将换行符放入文件名,他们应该有由此产生的问题)
    【解决方案2】:
    for fn in *
    do
      filename="$fn"
    done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 2012-01-11
      相关资源
      最近更新 更多