10の異なるディレクトリからファイルをコピーして別のディレクトリに追加したいと思います。
答え1
これを行う方法はいくつかあります。最も単純なものの1つは次のとおりです。
for d in dir1 dir2 dir3 dir4 dir5 dir6 dir7 dir8 dir9 dir10 ; do
cat "$d/filename" >> /path/to/other/dir/filename
done
または少し良い方法は次のとおりです。
#! /bin/bash
outdir='/path/to/otherdir'
filename='filename.txt'
sourcedirs="dir1 dir2 dir3 dir4 dir5 dir6 dir7 dir7 dir9 dir10"
for d in $sourcedirs ; do
cat "$d/$filename" >> "$outdir/$filename"
done
このバージョンの良い点は、$sourcedirs
変数を変更するだけで必要な数のディレクトリで動作できるようにすることです。また、$sourcedirs
手動で列挙する必要なく、他のコマンド(たとえばfind /top/level/directory -type d
)で生成することもできます。
たとえば、このバージョンでは、最上位ディレクトリをコマンドラインの最初の(唯一の)引数として指定できます。次に、$sourcedirs
その最上位ディレクトリのすべての最初のレベルのサブディレクトリ()のリストを作成します。-maxdepth 1
#! /bin/bash
topdir="$1"
outdir='/path/to/otherdir'
filename='filename.txt'
find "$topdir" -maxdepth 1 -exec cat "{}/$filename" \; >> "$outdir/$filename"
ツリーの深さに関係なく、特定のファイル名と一致するディレクトリツリー内のすべてのファイルのリストをリンクするには、次のようにします。
#! /bin/bash
topdir="$1"
outdir='/path/to/otherdir'
filename='filename.txt'
find "$topdir" -type f -name "$filename" -exec cat {} + >> "$outdir/$filename"
または1行で:
find /top/dir -type f -name 'filename.txt' -exec cat {} + \
>> /path/to/other/dir/filename.txt