Python 用于在文件夹中查找文件的Bash脚本

Python 用于在文件夹中查找文件的Bash脚本,python,bash,shell,bash4,Python,Bash,Shell,Bash4,我有几个文件夹 Main/ /a /b /c .. 我必须分别将这些文件夹中的输入文件abc1.txt、abc2.txt作为输入文件传递给python程序。 现在的剧本是, for i in `cat file.list` do echo $i cd $i #works on the assumption that there is only one .txt file inputfile=`ls | grep .txt` echo $inputfile

我有几个文件夹

Main/  
   /a  
   /b  
   /c    
 ..
我必须分别将这些文件夹中的输入文件abc1.txt、abc2.txt作为输入文件传递给python程序。 现在的剧本是,

for i in `cat file.list`
do
echo $i
cd $i
#works on the assumption that there is only one .txt file
inputfile=`ls | grep .txt`
echo $inputfile
python2.7 ../getDOC.py $inputfile
sleep 10
cd ..
done
echo "Script executed successfully"
因此,我希望无论有多少.txt文件,脚本都能正常工作

有人能告诉我shell中是否有任何内置命令来获取正确的.txt文件,以防出现多个.txt文件吗?

最好使用:

find . -name *.txt | xargs python2.7 ../getDOC.py
此示例是递归的,需要更好地使用:

此示例是递归的,需要

find命令非常适合-exec:

说明:

查找-调用查找 /path/to/Main-开始搜索的目录。默认情况下,递归查找搜索。 -类型F -只考虑文件,而不是目录等 -name*.txt-仅查找扩展名为.txt的文件。引用此命令是为了使bash不会通过globbing自动扩展通配符*。 -执行官…\;-对于找到的每个此类结果,对其运行以下命令: python2.7../getDOC.py{};-{}部分是每次替换查找结果的地方。 sleep 10-每次在文件上运行python脚本后,睡眠10秒钟。如果你不想让它睡觉,就把它拿走。 find命令非常适合于-exec:

说明:

查找-调用查找 /path/to/Main-开始搜索的目录。默认情况下,递归查找搜索。 -类型F -只考虑文件,而不是目录等 -name*.txt-仅查找扩展名为.txt的文件。引用此命令是为了使bash不会通过globbing自动扩展通配符*。 -执行官…\;-对于找到的每个此类结果,对其运行以下命令: python2.7../getDOC.py{};-{}部分是每次替换查找结果的地方。 sleep 10-每次在文件上运行python脚本后,睡眠10秒钟。如果你不想让它睡觉,就把它拿走。

*.txt将不会展开。。需要引号。我会将-print0和-type f添加到find中,并将-0选项添加到xargs中。我根本不会使用此方法,而是使用find中的-exec选项,就像sampson chen几乎做的那样。*.txt不会被扩展。。需要引号。我会将-print0和-type f添加到find中,并将-0选项添加到xargs中。我根本不会使用此方法,而是使用find中的-exec选项,就像sampson chen几乎做的那样。file.list和.txt文件之间的关系是什么?除了echo$i行之外,什么时候使用$i变量?在.txt文件中必须传递给pyhton脚本的唯一性是什么?如果你找不到文件名的话-name file.txtfile.list包含所有文件夹。.txt文件位于所有文件夹中。$i变量用于将cd放入该文件夹,但不知何故它在脚本中被忽略了。file.list文件和.txt文件之间的关系是什么?除了echo$i行之外,什么时候使用$i变量?在.txt文件中必须传递给pyhton脚本的唯一性是什么?如果你找不到文件名的话-name file.txtfile.list包含所有文件夹。.txt文件位于所有文件夹中。$i变量被用来cd到那个文件夹中,不知怎么的,它在脚本中被忽略了。我怀疑你是否尝试过你的解决方案:它失败得很惨,因为bash使用了第一个分号。您的意思可能是find/path/to/Main-type f-name*.txt-exec python2.7../getDOC.py{}-执行睡眠10\@sudo_O哈哈,这是我得到的最快+1答案:D@gniourf_gniourf哦,杜尔,刚刚醒来;修正。这样更好,你现在应该得到+1;-。我怀疑您是否尝试过您的解决方案:它失败得很惨,因为bash使用了第一个分号。您的意思可能是find/path/to/Main-type f-name*.txt-exec python2.7../getDOC.py{}-执行睡眠10\@sudo_O哈哈,这是我得到的最快+1答案:D@gniourf_gniourf哦,杜尔,刚刚醒来;修正。这样更好,你现在应该得到+1;-。对于这种简单的搜索模式,这是我最喜欢的方法。对于shopt-s nullglob或shopt-s failglob来说,它将是完美的。这是我最喜欢的处理这种简单搜索模式的方法。对于shopt-s nullglob或shopt-s failglob,它将是完美的。
shopt -s globstar nullglob
for i in Main/**/*txt; do
    python2.7 ../getDOC.py "$i"
    sleep 10
done
find /path/to/Main -type f -name "*.txt" -exec python2.7 ../getDOC.py {} \; -exec sleep 10 \;