BASH |在特定目录bash的所有文件中添加元素

时间:2013-08-22 08:15:24

标签: bash for-loop

假设我在文件夹中:

  

MyFolder文件

以下文件:

  

File1.txt File2.txt File3.txt File9.txt Bob.txt

我想应用以下算法,但我不知道如何在Bash中执行它(实际上循环For是我无法做到的):

 For (each file of MyFolder directory)
      add "<end>" at the end of the current text file
 EndFor

bash中的正确语法是什么?

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

这可以做到:

for file in /your/dir/*
do
    echo "<end>" >> "$file"
done

如果你的内部有一些dirs,你可能会收到错误bash: XX: Is a directory。为避免看到它们,您可以将2>/dev/null添加到echo命令的末尾:

echo "<end>" >> "$file" 2>/dev/null

甚至更好(thanks Barmar),检查它们是否为文件:

[ -f "$file" ] && echo "<end>" >> "$file"

这是执行if条件的简短方法:

if [ -f "$file" ]; then
   echo "<end>" >> "$file"
fi

答案 1 :(得分:1)

一种方式就是这样

#!/bin/bash
folder="myfolder"
for i in `find $folder/ -type f`
do
    echo $i
    echo "<end>" >> "$i"
done

答案 2 :(得分:1)

这是find一个班轮:

find /your/dir/ -maxdepth 1 -type f -exec sh -c 'echo "<end>" >> {}' \;

-maxdepth 1保留在子文件夹中包含文件的位置, -type f仅用于查找文件,-exec为每个找到的项触发echo命令。