我有以下目录结构:
+-archive
+-a
+-data.txt
+-b
+-data.txt
+-incoming
+-a
+-data.txt
+-c
+-data.txt
我如何做等效于
mv incoming/* archive/
但将 incoming
中的文件内容附加到 archive
中的文件而不是覆盖它们? 最佳答案
# move to incoming/ so that we don't
# need to strip a path prefix
cd incoming
# create directories that are missing in archive
for d in `find . -type d`; do
if [ ! -d "../archive/$d" ]; then
mkdir -p "../archive/$d"
fi
done
# concatenate all files to already existing
# ones (or automatically create them)
for f in `find . -type f`; do
cat "$f" >> "../archive/$f"
done
这应该找到
incoming
中的任何文件,并将其连接到 archive
中的现有文件。重要的部分是在
incoming
内部,否则我们必须去除路径前缀(这是可能的,但在上述情况下是不必要的)。在上述情况下, $f
的值通常看起来像 ./a/data.txt
,因此重定向到 ../archive/./a/data.txt
。关于linux - 移动时附加而不是覆盖文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2529391/