猫与通配符

时间:2012-05-09 13:41:49

标签: bash shell unix

问题可能是微不足道的,但我无法让它发挥作用。我只想将多个特定文件夹中的两个特定文件合并到每个特定文件夹中的新单个文件中。

cat */folder_*/*/file.a */folder_*/*/file.b > */folder_*/*/file.c

但它不起作用'原因

-bash: */folder_*/*/file.c: No such file or directory

所以我想也许由于某种原因cat无法创建文件(尽管它确实如此),所以我试过

touch */folder_*/*/file.c; cat */folder_*/*/file.a */folder_*/*/file.b > */folder_*/*/file.c

但同样它不适用于cat甚至touch

3 个答案:

答案 0 :(得分:2)

您不能将globbing用于目标文件。您必须完全指定文件名。它与cat无关。

答案 1 :(得分:2)

也许你想要这样的东西;

for a in  */folder_*/*/file.a; do
    # maybe continue if b missing
    cat "$a" "${a%.a}.b" >"${a%.a}.c"
done

通配符和重定向由shell处理; cat没有通配符的概念,也不知道你发送输出的位置。

答案 2 :(得分:1)

for dir in */folder_*/*; do 
  [[ -d "$dir" ]] && ( cd "$dir" && cat file.a file.b > file.c )
done

我在子shell中运行cd && cat,所以你不必回到你开始的地方。