如何使用“mv”命令移动特定目录中的文件除外?

新手上路,请多包涵

我想知道 - 我如何移动目录中的所有文件,除了特定目录中的那些文件(因为’mv’没有’–exclude’选项)?

原文由 David Liu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.3k
2 个回答

让我们假设 dir 结构是这样的,

 |parent
    |--child1
    |--child2
    |--grandChild1
    |--grandChild2
    |--grandChild3
    |--grandChild4
    |--grandChild5
    |--grandChild6

我们需要移动文件,使它看起来像,

 |parent
    |--child1
    |   |--grandChild1
    |   |--grandChild2
    |   |--grandChild3
    |   |--grandChild4
    |   |--grandChild5
    |   |--grandChild6
    |--child2

在这种情况下,您需要排除两个目录 child1child2 ,并将其余目录移动到 child1 目录。

利用,

 mv !(child1|child2) child1

这会将所有其余目录移动到 child1 目录中。

原文由 Chathura Kulasinghe 发布,翻译遵循 CC BY-SA 3.0 许可协议

由于 find 确实有一个排除选项,请使用 find + xargs + mv:

 find /source/directory -name ignore-directory-name -prune -print0 | xargs -0 mv --target-directory=/target/directory

请注意,这几乎是从 find 手册页复制的(我认为使用 mv –target-directory 比 cpio 更好)。

原文由 Slartibartfast 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题