【问题标题】:Displaying file name using special characters使用特殊字符显示文件名
【发布时间】:2021-10-22 04:49:21
【问题描述】:

我的 app 目录中有一个文件 ABC_123.csv,我想显示它的全名。我找到了两种方法(参见下面的代码 sn-p):一种使用 ??? ,另一种在所需文本 ABC_ 的末尾使用 asterisk

但是,两种方式都显示路径和名称。以下两个命令都以这种格式生成结果:path + name。我只需要名称。是否有任何特殊字符(如?或 *)仅显示名称文件?

[input]$ ls /usr/opt/app/ABC_???.csv
[output] /usr/opt/app/ABC_123.csv

[input]$ ls /usr/opt/app/ABC_*.csv
[output] /usr/opt/app/ABC_123.csv

我不能这样做:

[input]$ cd /usr/opt/app
[input]$ ls ABC_???.csv
[output] ABC_123.csv

需要的输出:

[input]$ ls /usr/opt/app/ABC_(some-special-character).csv
[output] ABC_123.csv

[已编辑] basename 正在工作,但是,我想使用 lssome special character 来实现这一点(如上面所需输出中突出显示的那样)。有什么办法吗?

[input]$ basename /usr/opt/app/ABC_???.csv
[output] ABC_123.csv

【问题讨论】:

  • basename /usr/opt/app/ABC_???.csv 返回什么?
  • basename /usr/opt/app/ABC_???.csv | hexdump -C 返回什么?请将此添加到您的问题中(无评论)。
  • 已添加。由于一些服务器限制,我只能使用ls
  • 你为什么不做一个ls /usr/opt/app/ABC_*.csv,或者——也许更简单——一个echo ls /usr/opt/app/ABC_*.csv

标签: bash shell unix


【解决方案1】:

你可以使用

find /usr/opt/app/ -type f -name "ABC_*.csv" -exec basename '{}' \;

basename 将隔离文件名。 find 将在指定目录中搜​​索与提供的模式匹配的文件。

【讨论】:

    【解决方案2】:

    如果您仅限于 ls,那么这可能会有所帮助。

    file="$(echo /usr/opt/app/ABC_???.csv)"; echo "${file##*/}"
    

    【讨论】:

    • 当多个文件匹配模式时将不起作用。
    【解决方案3】:

    将每个 csv 文件传送到 basename:

    ls /usr/opt/app/ABC_*.csv | xargs basename -a
    

    【讨论】:

      【解决方案4】:

      不需要基本名称:

      (cd /usr/opt/app/ && ls ABC_*.csv)
      

      “我不能这样做”是相似的,但没有解释原因,所以也许单行是可行的。在 sub-shell 中做可以防止当前目录改变。

      不——那里没有可以使用的特殊字符。它是通配符:https://en.wikipedia.org/wiki/Glob_(programming)

      【讨论】:

        【解决方案5】:

        bash:

        files=( /usr/opt/app/ABC_???.csv ) # Expands to array of matching filename(s)
        printf "%s\n" "${file[@]##*/}"
        

        扩展的## 部分从数组的每个元素中删除与以下模式匹配的最长前导字符串(因此,如果此模式仅与您的问题所说的单个文件匹配,或者匹配超过一)。因此,*/ 将切断字符串中最后一个斜杠之前的所有内容。

        【讨论】:

          猜你喜欢
          • 2015-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多