2012-12-02 172 views
1

我有几个文件夹作为bash脚本查找文件夹中

Main/ 
    /a 
    /b 
    /c  
.. 

我不得不从各自每个文件夹通过输入文件abc1.txtabc2.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文件?

+0

你的文件'file.list'和'.txt'文件之间有什么关系?何时使用'$ i'变量除了'echo $ i'行? –

+0

您的.txt文件中必须传递给pyhton脚本的唯一内容是什么?如果它的文件名不能找到。 -name file.txt – Chipmunk

+0

file.list包含其中的所有文件夹。 .txt文件位于所有文件夹中。 $ i变量用于cd到该文件夹​​中,不知何故它在脚本中被省略。 – veepsk

回答

3

find命令是适合于这种用-exec

find /path/to/Main -type f -name "*.txt" -exec python2.7 ../getDOC.py {} \; -exec sleep 10 \; 

说明:

  • find - 调用find
  • /path/to/Main - 目录,开始您的搜索。默认情况下,find递归搜索。
  • -type f - 只考虑文件(而不是目录等)
  • -name "*.txt" - 只有找到.txt扩展名的文件。这是引用的,所以bash不会通过globbing自动扩展通配符*
  • -exec ... \; - 对于每个找到的这样的结果,在其上运行下面的命令:
  • python2.7 ../getDOC.py {}; - 所述{}部分是其中来自find所述搜索结果被代入各一次。
  • sleep 10 - 每次在文件上运行python脚本后,休眠10秒钟。如果你不想让它睡觉,请删除它。
+0

打败我吧,该死的。 +1。 –

+0

我怀疑你是否尝试过你的解决方案:它因为第一个分号被bash使用而失败。你可能是指'find/path/to/Main -type f -name“* .txt”-exec python2.7 ../getDOC.py {} \; -exec sleep 10 \;' –

+0

@sudo_O哈哈,那是我得到的最快的+1回答:D –

0
find . -name *.txt | xargs python2.7 ../getDOC.py 
+2

'* .txt'不会被扩展..需要引号。 –

+1

我会将'-print0'和'-type f'添加到xargs以及'_ -0'选项。 – Lynch

+2

我完全不会使用这个方法,并且像sampson-chen(几乎)那样使用find中的'-exec'选项。 –

1

更好使用globs

shopt -s globstar nullglob 
for i in Main/**/*txt; do 
    python2.7 ../getDOC.py "$i" 
    sleep 10 
done 

这个例子是递归的,并且需要

+1

这是我最喜欢的做法(对于这种简单的搜索模式)。它可以完美搭配'shopt -s nullglob'或者'shopt -s failglob'。 –

+0

是的,发布相应编辑 –

相关问题