我想写一个bash脚本,如果我通过一个包含一些扩展名和文件夹的文本文件返回一个输出文件与所需的扩展名匹配的所有文件列表在所有子目录递归搜索Bash脚本获取所需的扩展名的所有文件
的文件夹是我的第二个参数的扩展名列表文件,我的第一个参数
我曾尝试:
for i in $1 ; do
find . -name $2\*.$i -print>>result.txt
done
但不工作
我想写一个bash脚本,如果我通过一个包含一些扩展名和文件夹的文本文件返回一个输出文件与所需的扩展名匹配的所有文件列表在所有子目录递归搜索Bash脚本获取所需的扩展名的所有文件
的文件夹是我的第二个参数的扩展名列表文件,我的第一个参数
我曾尝试:
for i in $1 ; do
find . -name $2\*.$i -print>>result.txt
done
但不工作
被转义为从注释中提到:
它不是写一个硬编码的文件名是个好主意。 给出的示例仅修复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
与以下内容
txt
sh
命名为y
,并呼吁与文本文件:
./x.sh y .
产生文件result.txt
项其内容是:
a.txt
b.txt
x.sh
OK,让我们给一些额外的提示从评论了: 如果结果FIEL不应该收集脚本的其他结果的任何其他conntent它可以简化为:
#!/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
如前所述: 硬编码结果。txt可以被删除和呼叫可以像
./x.sh y . > result.txt
./x.sh y . > result.txt
试一试这个一行命令。
用要搜索的文件夹替换/mydir。
变化作为参数传递给egrep的命令扩展的列表:
find /mydir -type f | egrep "[.]txt|[.]xml" >> result.txt
的egrep的后,每个扩展名应该与|
分开。
.
字符必须[.]
“该文件夹是我的第一个参数扩展名列表文件我的第二个参数” - 脚本似乎使用args反过来。 –
有这么多的错误...离开'[]',在'do'之后离开':',并且总是在两个事物之间放置空格,否则bash会搜索['或'do: ',或者给你'某物]'作为一个变量值。 – Siguza
你是对的我已更正 – AndreaF