1

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

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.

4

3 回答 3

2

也许你想要这样的东西;

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

通配符和重定向由 shell 处理;cat没有通配符的概念,也不知道您将其输出发送到哪里。

于 2012-05-09T14:13:32.490 回答
2

您不能对目标文件使用通配符。您必须完全指定文件名。cat与具体无关。

于 2012-05-09T13:44:53.960 回答
1
for dir in */folder_*/*; do 
  [[ -d "$dir" ]] && ( cd "$dir" && cat file.a file.b > file.c )
done

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

于 2012-05-09T14:22:23.333 回答