我想从 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