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

宛先ファイルにグロブを使用することはできません。ファイル名を完全に指定する必要があります。特に関係ありませんcat

于 2012-05-09T13:44:53.960 に答える
2

たぶんあなたはこのようなものが欲しいでしょう。

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

ワイルドカードとリダイレクトはシェルによって処理されます。catワイルドカードの概念はなく、出力の送信先もわかりません。

于 2012-05-09T14:13:32.490 に答える
1
for dir in */folder_*/*; do 
  [[ -d "$dir" ]] && ( cd "$dir" && cat file.a file.b > file.c )
done

cd && catはサブシェルでを実行しているので、最初の場所に戻ってCDを作成する必要はありません。

于 2012-05-09T14:22:23.333 に答える