通过bash读取文件夹中的任何.txt文件

时间:2014-03-24 10:28:01

标签: bash shell

我的想法是,我想读取特定文件夹中的任何.txt文件并执行某些操作。所以我尝试了这段代码:

#!/bin/bash
#Read the file line by line
while read line
do
    if [ $i -ne 0 ]; then
       #do something...
    fi
done < "*.txt"
echo "Finished!"

我想你现在有了我的想法。谢谢你的任何建议。

做完一些事后,我想把文件移到另一个文件夹。

2 个答案:

答案 0 :(得分:4)

不确定$i语句中的if是什么..但您可以逐行读取目录中的所有.txt文件:

while read line; do
    # your code here, eg
    echo "$line"
done < <(cat *.txt)

对于“特定目录”(即不是您当前所在的目录):

DIR=/example/dir
while read line; do
    # your code here, eg
    echo "$line"
done < <(cat "$DIR"/*.txt)

答案 1 :(得分:3)

为避免不必要地使用cat,您可以使用for循环:

for file in *.txt
do 
    while read line
    do  
        # whatever
        mv -i "$file" /some/other/place
    done < "$file"
done

这会分别处理每个文件,因此您可以单独对每个文件执行操作。如果您想将所有文件移动到同一个地方,您可以在循环外执行此操作:

for file in *.txt
do
    while read line
    do  
        # whatever        
    done < "$file"
done
mv -i *.txt /some/other/place

正如评论中所建议的,我已将-i切换添加到mv,在覆盖文件之前会提示。这可能是一个好主意,尤其是当您展开*通配符时。如果您不想提示,可以使用不会覆盖任何文件的-n开关。