0

我有

  • 文件夹-A
    • 文件夹-A1(<-- 里面的文件)
    • 文件夹-A2(<-- 里面的文件)
  • 文件夹-B
    • 文件夹-B1 (<-- 里面的文件)
    • 文件夹-B2(<-- 里面的文件)

我想得到什么

  • 文件夹-A
    • 文件夹-A1
      • 文件夹-A1-子文件夹(<-- 移动文件)
    • 文件夹-A2
      • 文件夹-A2-子文件夹(<-- 在其中移动文件)
  • 文件夹-B
    • 文件夹-B1
      • 文件夹-B1-子文件夹(<-- 移动文件)
    • 文件夹-b2
      • 文件夹-B2-子文件夹(<-- 移动文件)

起初它看起来很复杂。但我要做的就是将所有文件夹中的文件移动到同一文件夹中的一个文件夹下(必须创建子文件夹,如果它包含其父文件夹的名称,那就太好了)。

有什么办法可以用 bash 命令来完成吗?还是一个应用程序?希望你对我有一些提示:-)

4

1 回答 1

2

这可以在带有 find 的 bash 单行中完成(可能会使这更容易/更小,但我不是 shell 专家):

find . -type f -exec bash -c 'mv {} $(dirname {})/$(basename $(dirname {}))-Subfolder/$(basename {})' \;`

(找到所有非目录文件,将它们从原始位置移动到“文件夹名/文件夹名-子文件夹/文件名”。必须这样做,bash -c因为否则将首先评估子外壳)

您需要在执行命令之前创建子文件夹,这可以通过另一个查找来完成:

find . -type d ! -iname "*-Subfolder" -exec bash -c 'mkdir {}/$(basename {})-Subfolder' \;
于 2012-08-22T11:00:35.433 回答