もう一つ質問があります。
3 つの異なるディレクトリがありますが、その中には同じ名前の同じファイルがあります。例:
ディレクトリ1:
dir1/file1.txt
dir1/file2.txt
dir1/file3.txt
ディレクトリ2:
dir2/file1.txt
dir2/file2.txt
dir2/file3.txt
ディレクトリ3:
dir3/file1.txt
dir3/file2.txt
dir3/file3.txt
同じ名前のファイルを貼り付けたいと思います。いいね:
dir1/file1.txt
+ dir2/file1.txt
+ dir3/file1.txt
=file1.txt
dir1/file2.txt
+ dir2/file2.txt
+ dir3/file2.txt
=file2.txt
dir1/file3.txt
+ dir2/file3.txt
+ dir3/file3.txt
=file3.txt
どうすればいいですか?
答え1
ファイルの内容を連結したい場合は、次のようにします。
cat dir*/file1 > file1
cat dir*/file2 > file2
cat dir*/file3 > file3
ワイルドカードを使用すると、cat コマンドはパターンに一致するすべてのディレクトリ/ファイルの内容を読み取るため、結果のファイルに書き込まれる 3 つのディレクトリすべてにある同じ名前のファイルの内容が取得されます。
答え2
ディレクトリ名だけがわかっていてファイル名がわからない場合は、ディレクトリの 1 つからファイル名を配列に保存し、要素を反復処理してディレクトリ名を削除し、各ディレクトリから結果のファイル名を貼り付けることができます。
files=(dir3/*)
for p in "${files[@]}"; do
f=${p#*/}; paste dir1/"$f" dir2/"$f" dir3/"$f" > "$f"; done
globを使用してシェルに展開させると、より短くなることに注意してください(ディレクトリ名は辞書順で使用されます)。例:
for p in "${files[@]}"; do f=${p#*/}; paste dir*/"$f" > "$f"; done