我想要完成的是将文件(和子文件夹)添加到特定文件夹中时移动它们,但我想在源和目标中保留原始文件夹结构。我相信通过一个例子可以很容易地解释这一点。想象一下以下文件夹/文件结构:
/source/foo/bar1
/source/bar2
/dest
我想存档以下文件夹/文件结构。
/source/foo
/dest/foo/bar1
/dest/bar2
有没有一种方法可以自动化地做到这一点?预先感谢您的回答。
答案1
用于rsync
复制所有内容,然后从源中删除除目录之外的所有内容。例如,从此开始(source
包含该文件的目录和包含该文件的bar2
子目录):foo
source/foo/bar2
$ tree source/
source/
├── bar2
└── foo
└── bar1
1 directory, 2 files
你会运行:
rsync -r source/ dest/
这会创建:
$ tree dest/
dest/
├── bar2
└── foo
└── bar1
1 directory, 2 files
现在删除所有非目录source
:
find source/ -not -type d -delete
或者,如果您find
没有-delete
,请使用:
find source/ ! -type d -exec rm {} +
要使其自动化,您只需编写一个像这样的小脚本:
#!/bin/sh
source="$1"
dest="$2"
rsync -r "$source"/ "$dest"/
find "$source"/ -not -type d -delete
使脚本可执行并使用源目录和目标目录作为参数运行它:
foo.sh /source /dest