我有几个文件夹
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文件的数量如何,脚本都能正常工作。
如果有多个.txt文件,shell中是否有任何内置命令可以获取正确的.txt文件,是否可以让我知道?
答案 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
此示例是递归的,需要bash4
答案 2 :(得分:0)
find . -name *.txt | xargs python2.7 ../getDOC.py