linux - 用于移动包含文件的子文件夹的命令,同时保持原始结构

标签 linux shell

我有一个 parent/ 文件夹,里面有几个子文件夹。结构:

/parent/
    /subfolder_1/
        - file_1.txt
        - file_2.txt
    /subfolder_2/
        - file_3.txt
        - file_4.txt

现在,我需要递归地移动 parent/ 文件夹的内容到空的parent_tmp/ 目录。问题是,我需要在 parent/ 中保留原始文件夹结构。

移动后的预期结果:

    /parent/
        /subfolder_1/
            (empty)
        /subfolder_2/
            (empty)


    /parent_tmp/
        /subfolder_1/
            - file_1.txt
            - file_2.txt
        /subfolder_2/
            - file_3.txt
            - file_4.txt

通常情况下,我会简单地做

mv parent/* parent_tmp

但这当然会永久移动子文件夹。

有没有办法调整mv命令来保持源目录原来的结构?

注意:

我意识到我可以,例如复制parent/parent_tmp,然后删除parent/子文件夹中的文件。这是我的 B 计划。

最佳答案

您可以使用 find 来自 parentparent_tmp 目录的父级:

find parent -type f -exec bash -c 'mkdir -p "parent_tmp/${1%/*}" && 
      mv "$1" "parent_tmp/${1%/*}"' - {} \;

关于linux - 用于移动包含文件的子文件夹的命令,同时保持原始结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31675114/

相关文章:

linux - 如何使用 awk 在条件下删除 csv 文件的行?

c - 使用子进程处理信号 SIGSTP、SIGCONT、SIGINT

linux - 从变量输出中获取特定行

shell - 重启后 chmod -> 权限更改

Linux:当 mv 失败时,原始文件是否仍然完好无损?

linux - AWS ec2 en_US.UTF-8 问题

php - Virtual Box 中的访问被拒绝

c - 对 `fprintf(stdout, ...)` 和 `fprintf(stderr, ...)` 的调用是否保证不会与多个线程交错?

shell - 对制表符分隔文件中的所有 "cells"执行算术运算

bash - 将值存储到 Shell 脚本中的变量