从多个目录复制文件

从多个目录复制文件

我想从 10 个不同的目录复制一个文件并将它们附加到另一个目录中。

答案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"

或作为单行:

find /top/dir -type f -name 'filename.txt' -exec cat {} + \
    >> /path/to/other/dir/filename.txt

相关内容