1

我有几个文件夹

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 文件?

4

3 回答 3

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 不会*通过通配符自动扩展通配符。
  • -exec ... \;- 对于找到的每个此类结果,对其运行以下命令:
  • python2.7 ../getDOC.py {};- 该{}部分是find每次替换搜索结果的位置。
  • sleep 10- 每次在文件上运行 python 脚本后休眠 10 秒。如果您不想让它睡觉,请将其删除。
于 2012-12-02T17:18:55.383 回答
1

更好地使用glob

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

这个例子是递归的,需要

于 2012-12-02T17:18:12.140 回答
0
find . -name *.txt | xargs python2.7 ../getDOC.py
于 2012-12-02T17:15:39.847 回答