终端查找,目录最后而不是第一个

Dav*_*osh 5 bash terminal makefile

我有一个makefile将JavaScript文件连接在一起,然后运行该文件uglify-js来创建一个.min.js版本.

我目前正在使用此命令查找并连接我的文件

find src/js -type f -name "*.js" -exec cat {} >> ${jsbuild}$@ \;
Run Code Online (Sandbox Code Playgroud)

但它首先在目录中列出文件,这使得大量的意义,但我希望它列出目录上方.js文件中的src/js文件,以避免我的undefinedJS错误.

无论如何要做到这一点或?我有一个谷歌周围,看到了sort命令和-s标志,find但它有点超过我的理解在这一点!

[编辑]

最终的解决方案与接受的答案略有不同,但它被标记为已接受,因为它给我带来了答案.这是我使用的命令

cat `find src/js -type f -name "*.js" -print0 | xargs -0 stat -f "%z  %N" | sort -n | sed -e "s|[0-9]*\ \ ||"` > public/js/myCleverScript.js
Run Code Online (Sandbox Code Playgroud)

Ser*_*rov 4

可能的解决方案:

  1. 用于find获取文件名和目录深度,即find ... -printf "%d\t%p\n"
  2. 按目录深度对列表进行排序sort -n
  3. 从输出中删除目录深度以仅使用文件名

测试:

不排序:

$ find folder1/ -depth -type f -printf "%d\t%p\n"
2   folder1/f2/f3
1   folder1/file0
Run Code Online (Sandbox Code Playgroud)

与排序:

$ find folder1/ -type f -printf "%d\t%p\n" | sort -n | sed -e "s|[0-9]*\t||"
folder1/file0
folder1/f2/f3
Run Code Online (Sandbox Code Playgroud)

你需要的命令看起来像

cat $(find src/js -type f -name "*.js" -printf "%d\t%p\n" | sort -n | sed -e "s|[0-9]*\t||")>min.js
Run Code Online (Sandbox Code Playgroud)