使用Bash脚本查找文件夹中的文件

时间:2012-12-02 17:11:56

标签: python bash shell

我有几个文件夹

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文件的数量如何,脚本都能正常工作。

如果有多个.txt文件,shell中是否有任何内置命令可以获取正确的.txt文件,是否可以让我知道?

3 个答案:

答案 0 :(得分: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秒钟。如果你不想睡觉,请删除它。

答案 1 :(得分:1)

更好地使用globs

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

此示例是递归的,需要

答案 2 :(得分:0)

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