移动文件时保持文件架构

时间:2014-03-11 13:52:17

标签: bash find mv

我想将一些文件从一个文件夹移动到另一个文件夹。说我有:

├── bar
│   ├── a_folder
│   │   └── apicture.png
│   └── another_folder
│       └── myfile.txt
└── foo

我希望每个txt文件都从bar移到foo

├── bar
│   ├── a_folder
    │   └── apicture.png
│   └── another_folder
└── foo
    └── another_folder
        └── myfile.txt

我尝试使用find命令:

find bar -type f -exec mv {} $temp/{} \;

这应该有效但仅当foo文件夹中已存在文件夹时。因此,我正在寻找一种在foo中创建这些文件夹的方法,似乎mv没有这样做。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

cp -R bar/. foo/
find bar -type f -delete

是的,涉及副本而不是单行,但除非我们在这里谈论大量数据和重复工作,否则这是一个很好的止损。 (请注意bar/.而不是通常的bar/*,因为后者会遗漏点文件。)

我怀疑移动文件有一条单行方式,但无论如何保留目录。

答案 1 :(得分:1)

rsync内置了此功能。

cd bar && rsync --relative [--no-implied-dirs] . ../foo/

如果树中存在符号链接,请使用--no-implied-dirs。

如果您只想移动目标目录已存在的文件,请使用--no-dirs标记。

rsync不在POSIX工具集中,但它在类似UNIX的机器上很常见,包括OS X和大多数Linuxen。