我正在尝试编写一个bash脚本,如果我传递包含某个扩展名的文本文件,并且文件夹返回一个输出文件,其中包含与所需扩展名匹配的所有文件的列表,在所有子目录中递归搜索< / p>
该文件夹是我的第二个参数,扩展名列表文件是我的第一个参数
我试过了:
for i in $1 ; do
find . -name $2\*.$i -print>>result.txt
done
但不起作用
答案 0 :(得分:1)
如评论中所述:
写入硬编码文件名不是一个好主意。 给定的示例仅修复OP问题中的给定代码。 是的,当然,用
打电话会更好x.sh y . > blabla
并从脚本本身中删除文件名。但我的意图不是解决这个问题......
以下bash脚本,名为x.sh
#!/bin/bash
echo -n >result.txt # delete old content
while read i; do # read a line from file
find $2 -name \*.$i -print>>result.txt # for every item do a find
done <$1 # read from file named with first arg from cmdline
使用名为y
的文本文件,其中包含以下内容
txt
sh
并致电:
./x.sh y .
会生成一个文件result.txt
,其内容为:
a.txt
b.txt
x.sh
好的,让我们从评论中提供一些额外的提示: 如果结果领域不应该从脚本的其他结果中收集任何其他结果,则可以简化为:
#!/bin/bash
while read i; do # read a line from file
find $2 -name \*.$i -print # for every item do a find
done <$1 >result.txt # read from file named with first arg from cmdline
如前所述: 可以删除硬编码的result.txt,并且调用可以类似于
./x.sh y . > result.txt
答案 1 :(得分:0)
试试这个单线命令。
将 / mydir 替换为要搜索的文件夹。
将作为参数传递的扩展名列表更改为 egrep 命令:
find /mydir -type f | egrep "[.]txt|[.]xml" >> result.txt
在 egrep 之后,每个扩展名应与|
分开。
.
转义 [.]
字符