将子目录中的文件上移一层(并且仅*一层)

0 directory bash mv subdirectory

我正在尝试将嵌套在子目录中的文件上移一层。我在OS X终端机上,对bash还是陌生的。我相当确定这很简单,我只是不知道该怎么做。

我想更改一个看起来像这样的文件结构:

~/container
       /1-A
           LEVEL 1 - 000.jpg
           LEVEL 1 - 001.jpg
           LEVEL 1 - 002.jpg
       /1-B
           /2-A
               LEVEL 2 - 007.jpg
               LEVEL 2 - 008.jpg
               LEVEL 2 - 009.jpg
       /1-C
           LEVEL 1 - 003.jpg
           LEVEL 1 - 004.jpg
           LEVEL 1 - 005.jpg
           LEVEL 1 - 006.jpg
       /1-D
           /2-C
               LEVEL 2 - 010.jpg
               LEVEL 2 - 011.jpg
               LEVEL 2 - 012.jpg
               LEVEL 2 - 013.jpg
               LEVEL 2 - 014.jpg
       /1-E
           LEVEL 1 - 015.jpg
           LEVEL 1 - 016.jpg
           LEVEL 1 - 017.jpg
       /1-F
           /2-B
               /3-A
                   LEVEL 3 - 018.jpg
                   LEVEL 3 - 019.jpg
                   LEVEL 3 - 020.jpg
                   LEVEL 3 - 021.jpg
Run Code Online (Sandbox Code Playgroud)

到一个看起来像这样的人:

~/container
       /1-A
           LEVEL 1 - 000.jpg
           LEVEL 1 - 001.jpg
           LEVEL 1 - 002.jpg
       /1-B
           LEVEL 2 - 007.jpg
           LEVEL 2 - 008.jpg
           LEVEL 2 - 009.jpg
           /2-A
       /1-C
           LEVEL 1 - 003.jpg
           LEVEL 1 - 004.jpg
           LEVEL 1 - 005.jpg
           LEVEL 1 - 006.jpg
       /1-D
           LEVEL 2 - 010.jpg
           LEVEL 2 - 011.jpg
           LEVEL 2 - 012.jpg
           LEVEL 2 - 013.jpg
           LEVEL 2 - 014.jpg
           /2-C
       /1-E
           LEVEL 1 - 015.jpg
           LEVEL 1 - 016.jpg
           LEVEL 1 - 017.jpg
       /1-F
           /2-B
               LEVEL 3 - 018.jpg
               LEVEL 3 - 019.jpg
               LEVEL 3 - 020.jpg
               LEVEL 3 - 021.jpg 
               /3-A
Run Code Online (Sandbox Code Playgroud)

我试过了:

find ~/container  -mindepth 3 -type f -exec mv {} . \;
Run Code Online (Sandbox Code Playgroud)

find ~/container  -mindepth 3 -type f -exec mv {} .. \;
Run Code Online (Sandbox Code Playgroud)

但是它们将文件相对于根目录移动,而不是相对于文件本身所在的目录。换句话说,它们将文件移得太远。我希望他们精确地向上移动一个层次,但是无论它们是如何深深地嵌套。

有人可以帮忙吗?

小智 5

这应该可以解决您的问题:

find ~/container -mindepth 3 -type f -execdir mv "{}" ./.. \;
Run Code Online (Sandbox Code Playgroud)

说明:
find ~/container在此文件夹中搜索。
-mindepth 3仅显示向下3个目录的文件。
-type f仅显示文件(不显示目录)。
-execdir在其目录内的每个文件上执行以下命令。
mv "{}" ./..将文件上移一个目录。
\;对所选的每个文件重复一个新命令。