我正在尝试从子文件夹中的最新文件中找到特定行。文件具有相同的名称。因此结构如下:
- 文件夹
- 子文件夹1
- 文件名.xml
- 子文件夹2
- 文件名.xml
- 子文件夹1
我正在使用 grep 来获取行
grep -r "mySubString" folder/
我尝试使用 find 对文件进行排序,正如建议的那样这里。但我不知道如何将两者结合起来以从最新文件中获取行。
感谢您的帮助。
答案1
find . -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "
这将返回从您运行此命令的目录及其所有子目录中创建的最新文件。如果您想要在特定目录中搜索,请更改.
为目录路径。
使用 grep 查找此文件的内容:
cat `find . -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "` | grep "mySubString"
编辑:我不确定。我自己很快尝试了一下,而且成功了。我创建了一个测试文件并使用了这个命令。对我来说很有效。如果有问题,请告诉我。
答案2
zsh:
grep pattern **/*(.om[1])
om
按修改日期排序并且.
是常规文件的限定符。
GNU find
:
grep pattern "$(find -type f -printf '%T@ %p\n'|sort -n|tail -n1|cut -d' ' -f2-)"
%T@
是修改时间,%p
是路径名。
BSD:
grep pattern "$(find . -type f -exec stat -f '%m %N' {} +|sort -n|tail -n1|cut -d' ' -f2-)"
%m
是修改时间,%N
是路径名。
重击4:
shopt -s globstar;grep pattern "$(ls -dt **|head -n1)"
这包括目录并可能导致参数列表太长的错误。