我正在尝试为OS X创建Keyboard Maestro的宏,执行以下操作:
其中一个选项是“执行一个shell脚本”,所以我认为这样做是为了1.在谷歌搜索了一下后我想出了这个:
cd /path/to/directory/
ls -t | head -n1
将其排序,然后返回第一个文件名。但是,它似乎也包括一个我不想要的换行符。至于2:我可以在应用程序中输出带有不同操作的文本“最新文件:”,并将文件名粘贴到其后面。但我想知道你是否不能返回“随机文本”+ ls
命令的结果。
所以我的问题是:我是否只能使用ls
命令执行此操作?如何在没有任何换行符或返回的情况下获取 最新文件的名称?
答案 0 :(得分:10)
由于你已经在使用管道,只需在那里再扔一个:
ls -t | head -n1 |awk '{printf("newest file: %s",$0)}'
(请注意,“printf”末尾不包含'\ n';摆脱了换行符)
编辑:
Arkku建议在第一行之后退出awk,它看起来像是:
ls -t | awk '{printf("newest file: %s",$0);exit}'
答案 1 :(得分:4)
cd /path/to/directory/
echo -n "random text goes here" $(ls -t | head -n1)
如果需要,可以用相同的方式在末尾添加更多文字。
答案 2 :(得分:2)
你可以在bash中用这样的单个语句来做到这一点:
echo -n "newest file: $(ls -t |head -n1)"
您也可以在没有echo
的情况下移除该换行符:
ls -t |head -n1 |tr -d '\n'
确保ls
不向非tty流输出颜色(即按ls --color=never
或ls --color=auto
指定颜色或根本不指定颜色。)
ls
解决方案将输出按修改时间排序的任何类型的文件。如果您只想要常规文件或者您不想要目录,那么您可以使用find
和xargs
:
echo -n "newest file: $(find . -maxdepth 1 -type f -print0 |xargs -0 ls -t)"
答案 3 :(得分:2)
使用ls
的输出是不好的做法。
find -type f -printf '%T+ %p\n' | sort -r | head -n 1
答案 4 :(得分:-1)
您不能只使用ls
。但是,由于echo
通常内置在shell中,因此它不会在脚本中添加任何开销。为了得到文件的名称,我建议:
echo -n "newest: $(ls -t1 | head -n1)"
如果出于某种原因,你真的想要消除head
,那么我想你可以选择以下内容:
ls -t1 | ( read n; echo -n "newest: $n")
(read
内置于shell中,head
不是。)
请注意,这些解决方案不会递归到子目录中,因为问题中未指定。实际上,子目录可以打印为最新的“文件”。
答案 5 :(得分:-1)
因为当我搜索“在mac shell上找到最新的文件”时首先出现,然后我想我会发帖给别人帮忙......
如果你试图在该目录中找到该文件,那么ls是好的,但我发现find工作得很好,你可能会在这个过程中学到一些新知识。然而,我必须在我的mac上找到GNU find才能使用上面发布的diimdeep代码行。
如果您运行Homebrew,如果您在终端上花费任何时间,或者可能是其中一种替代方案,那么您应该这样做。 你可以运行“brew install findutils” 一旦完成,上面的代码就会像这样......
sudo /usr/local/opt/findutils/bin/gfind -type f -printf '%T+ %p\n' | sort -r | head -n 1
如果您想要更多,只需将最后一位更改为10即可。如果你需要指定它,gfine将采取一个路径。我通常cd进入我想要开始的文件夹。查找是自动递归的。