【问题标题】:Linux: Find all folders with a particular name, remove them and have a folder copied into the parent directory of those foldersLinux:查找具有特定名称的所有文件夹,删除它们并将文件夹复制到这些文件夹的父目录中
【发布时间】:2015-01-19 04:36:37
【问题描述】:

我正在尝试查看是否可以在 Linux 中使用一行命令执行以下操作:

我有一个名为 FolderA 的文件夹,它位于我电脑的 3 个不同位置。我必须在几台Linux机器上运行一个命令来替换FolderA(它们都可以隐藏在单独的父文件夹中,获取它们的位置并替换FolderB(我知道它在哪里并且它是一个固定路径,比如在我的当前目录中) ,这与FolderA所在的位置不同。)删除FolderA,并将FolderB复制到FolderA所在的位置。

我知道这有很多事情要做,我可以大致弄清楚使用 find 命令来获取位置,使用 rm -rf 来删除文件夹(但我不知道如何利用 find 中的结果) 然后使用 cp 复制文件夹。但是,我怎样才能在一行中完成它们?

谢谢!

【问题讨论】:

    标签: linux command-line


    【解决方案1】:

    在这里,我认为这应该可以满足您的需求。

    find / -name '*FolderA' -delete -print | xargs -l dirname | xargs -l cp FolderB
    

    find 命令将在整个文件系统中搜索以 FolderA 结尾的路径,将其删除,然后打印文件夹的路径。 xargs -lfind 输出中获取每一行,并以每一行作为参数调用dirnamedirname 采用路径并截断路径上的最后一项。最后一个命令使用xargs 将前一个命令的每一行输出作为cp 命令的目标。警告:这尚未在路径中使用空格进行测试。

    【讨论】:

    • 就像你提到的那样,当 dirname 包含空格时这不起作用....我也尝试使用 'dirname' 但没有运气...
    • 首先,dirname 是一个命令——你不想在它的位置指定一个路径。其次,应该可以修改此命令以允许路径中有空格。 find / -name "*FolderA" -delete -print0 | xargs -0 dirname | tr "\n" "\0" | xargs -0 cp FolderB 可能有用。
    猜你喜欢
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2012-12-11
    • 2019-06-20
    • 2013-04-12
    • 2019-01-03
    • 1970-01-01
    相关资源
    最近更新 更多