将所有文件从子目录移动到父目录

将所有文件从子目录移动到父目录

我有一个这样的目录结构:

├── Tom
│   └── c
│       └── 2
│           ├── file.jpg
│           └── text.txt
└── Sam
    ├── 1
    │   └── c
    │       └── music.aac
    ├── E
    │   └── 9
    │       └── pic.jpg
    └── b
        ├── 9
        │   └── sound.aac
        └── d
            └── book.doc

我想使用一个命令将所有文件从各个子文件夹移动到主父文件夹(Tom、Sam 等),然后删除所有空子文件夹。我怎样才能做到这一点?

谢谢

答案1

不知道为什么它必须是一句单行话。但这是一种可能性。它查找给定目录树中的所有文件,并将每个此类文件向上移动两个目录。

find -type f | while read; do mv "$REPLY" "$(dirname $REPLY)/../../"; done

请小心使用,因为该命令非常适合您给定的目录结构,并且不考虑其他情况(例如,它将从所有目录移动文件,而不仅仅是您显示的叶目录中的文件)。

答案2

怎么样

find Tom Sam -type f | while read FN; do echo mv "$FN" "${FN%%/*}"; done

相关内容