複数のディレクトリからファイルをコピーする[閉じる]

複数のディレクトリからファイルをコピーする[閉じる]

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

関連情報