【问题标题】:How do I get the name of the newest file via the Terminal?如何通过终端获取最新文件的名称?
【发布时间】:2010-05-15 00:58:33
【问题描述】:

我正在尝试为 OS X 的 Keyboard Maestro 创建一个宏,执行以下操作:

  1. 根据创建日期获取磁盘目录中最新文件的名称;
  2. 粘贴文本“最新文件:”加上最新文件的名称。

它的一个选项是“执行一个 shell 脚本”,所以我认为它会在 1 内完成。在谷歌搜索了一下之后,我想出了这个:

cd /path/to/directory/
ls -t | head -n1

这会正确排序,并返回第一个文件名。但是,它似乎也包含我不想要的换行符。至于2:我可以在应用程序中使用不同的操作输出文本“最新文件:”,并将文件名粘贴到后面。但我想知道你是否不能返回“随机文本”+ls 命令的结果。

所以我的问题是:我只能使用ls 命令来执行此操作吗?以及如何获得 just 没有任何换行符或返回的最新文件的名称?

【问题讨论】:

  • 要获取随机文本,您可以执行以下操作:head -c 12 /dev/urandom | base64。哦,等等,你的意思是任意文本。对不起,我很困惑。

标签: shell command-line keyboard-maestro


【解决方案1】:

既然你已经在使用管道,那就再放一个吧:

ls -t | head -n1 |awk '{printf("newest file: %s",$0)}'

(请注意,“printf”末尾不包含 '\n';这样可以去掉换行符)

编辑:

Arkku 建议在第一行之后退出 awk,它看起来像:

ls -t | awk '{printf("newest file: %s",$0);exit}'

【讨论】:

  • 既然可以在第一行之后的 awk 中使用 exit,为什么还要使用 head -n1
  • 谢谢。如何将其保存到变量中而不是打印出来?
【解决方案2】:
cd /path/to/directory/
echo -n "random text goes here" $(ls -t | head -n1)

如果你愿意,你可以用同样的方法在末尾添加更多的文字。

【讨论】:

  • 谢谢!出于某种原因,这仍然在应用程序中返回,即使 -n 没有在终端本身中显示它。但是命令后面的 echo 也可以用于其他一些事情:)
【解决方案3】:

使用ls 的输出是不好的做法。

find -type f -printf '%T+ %p\n' | sort -r | head -n 1

【讨论】:

    【解决方案4】:

    你可以在 bash 中用一条语句做到这一点,如下所示:

    echo -n "newest file: $(ls -t |head -n1)"
    

    您也可以在没有echo 的情况下删除该换行符:

    ls -t |head -n1 |tr -d '\n'
    

    确保 ls 不会将颜色输出到非 tty 流(即通过 ls --color=neverls --color=auto 指定颜色或根本不指定颜色)。

    ls 解决方案将输出按修改时间排序的 any 类型的文件。如果您只想要常规文件或者您不想要目录,那么您可以使用findxargs

    echo -n "newest file: $(find . -maxdepth 1 -type f -print0 |xargs -0 ls -t)"
    

    【讨论】:

      【解决方案5】:

      你不能只使用ls。但是,由于echo 通常内置在 shell 中,因此它并没有真正在脚本中增加任何开销。要获取文件的名称,我建议:

      echo -n "newest: $(ls -t1 | head -n1)"
      

      如果出于某种原因,您真的想消除head,那么我想您可以选择以下方法:

      ls -t1 | ( read n; echo -n "newest: $n")
      

      read 内置在 shell 中,head 不是。)

      请注意,这些解决方案不会递归到子目录中,因为问题中没有指定。事实上,子目录可能会打印为最新的“文件”。

      【讨论】:

      • 因此,7 年后有人对此(以及其他一些答案)投了反对票。我想指出,发布此答案主要是为了回答确切的问题“我只能使用ls 命令执行此操作”(使用awk 的已接受答案,我提出了一个建议,已经发布)。如果这不能回答其他问题,这不是我的错,即使该问题出现在搜索结果中。
      猜你喜欢
      • 1970-01-01
      • 2021-09-14
      • 2021-03-10
      • 2012-05-18
      • 2023-03-28
      • 2022-01-11
      • 1970-01-01
      • 2018-08-07
      • 2013-05-15
      相关资源
      最近更新 更多