8

我正在尝试为 OS X 的键盘大师创建一个宏,执行以下操作:

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

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

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

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

所以我的问题是:我可以只使用ls命令吗?以及如何获取最新文件的名称而没有任何换行符或返回?

4

5 回答 5

13

由于您已经在使用管道,因此只需在其中放置另一个管道:

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

(请注意,“printf”在末尾不包含 '\n';这消除了换行符)

编辑:

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

ls -t | awk '{printf("newest file: %s",$0);exit}'
于 2010-05-15T01:07:18.267 回答
4
cd /path/to/directory/
echo -n "random text goes here" $(ls -t | head -n1)

如果需要,您可以以相同的方式在末尾添加更多文本。

于 2010-05-15T01:03:56.160 回答
4

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

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

于 2017-01-18T16:33:08.587 回答
2

您可以在 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解决方案将输出按修改时间排序的任何类型的文件。如果您只想要常规文件或者您不想要目录,那么您可以使用findand xargs

echo -n "newest file: $(find . -maxdepth 1 -type f -print0 |xargs -0 ls -t)"
于 2010-05-15T01:40:00.717 回答
-1

你不能只用ls. 然而,正如echo通常内置在 shell 中的那样,它并没有真正在脚本中增加任何开销。要获取文件的名称,我建议:

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

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

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

read内置在外壳中,head不是。)

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

于 2010-05-15T01:20:53.490 回答