问题可能是微不足道的,但我无法让它发挥作用。我只想将多个特定文件夹中的两个特定文件合并到每个特定文件夹中的新单个文件中。
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
。
答案 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
,所以你不必回到你开始的地方。