将所有.js文件写入单个文件的命令?

将所有.js文件写入单个文件的命令?

我正在尝试将.js目录和子目录中的所有文件按词汇顺序放入单个文件中。我尝试过:

grep -r --include=*.js * > dir/.filename 

我做错了什么?

答案1

您可以使用find来查找文件,然后sort对名称进行排序:

find . -type f -name '*.js' | sort 

要将名称保存在文件中:

find . -type f -name '*.js' | sort >files.txt

让我们分析一下你的命令:

grep -r --include=*.js *
  • 您需要在使用-r选项 eg 时将目录名称作为参数(也请放在''glob 匹配周围,以免产生意外结果):

    grep -r --include='*.js' .
    

    这将寻找非空文件,即这相当于:

    grep -r --include='*.js' '.' .
    
  • 如果你想检查特定的模式,例如以以下内容开头的行TERM

    grep -r --include='*.js' '^TERM' .
    

无论如何,重点是grep在文件内容中搜索任何匹配项,但您的目标是匹配文件名,因此您应该寻找可以执行此操作的其他方法,例如findshell 循环。


您还可以使用globstar选项以递归方式bash搜索以 结尾的文件.js,然后使用 对其进行排序sort

首先您需要启用以下globstar选项bash

shopt -s globstar

现在**/*.js将找到带有扩展名的文件(和目录).js

因此,下面的方法应该可以解决问题:

for i in **/*.js; do [[ -f $i ]] && echo "$i"; done

[[ -f $i ]]是为了确保我们只处理输出文件。

答案2

grep是一款线路匹配工具。它适用于正在搜索的内容搜索文件,但不能搜索文件本身。

使用find命令来执行此操作。默认情况下,Find 是递归的,并且有许多用于优化搜索的选项。

例如,如果我想以递归方式*.png/home目录向下到子目录查找所有带有扩展名的常规文件(不是目录),我会告诉find从目录开始/home,搜索带有的文件-type,并对以“.png”结尾的文件使用不区分大小写的匹配-iname

xieerqi:$ find /home -type f -iname "*.png" | head
/home/xieerqi/Downloads/35457542.png
/home/xieerqi/genymotion/icons/icon.png
/home/xieerqi/chinese-calendar-0.8.2/skin/default/ok.png
/home/xieerqi/chinese-calendar-0.8.2/skin/default/no.png
/home/xieerqi/chinese-calendar-0.8.2/skin/default/note.png
/home/xieerqi/chinese-calendar-0.8.2/skin/default/chinesecalendarBGyellow.png
/home/xieerqi/chinese-calendar-0.8.2/skin/blue/ok.png
/home/xieerqi/chinese-calendar-0.8.2/skin/blue/no.png
/home/xieerqi/chinese-calendar-0.8.2/skin/blue/note.png
/home/xieerqi/chinese-calendar-0.8.2/skin/blue/chinesecalendarBGblue.png

相关内容