将一级的所有文件上移一级

Move all files at one level up one level

我在 linux 服务器上进行备份时遇到问题,该服务器以某种方式将所有文件夹的文件向下移动了一层到同名的新文件夹中。我想 return 所有文件到它们原来的位置。许多文件的名称中都有空格使事情复杂化。

原目录结构:

backup/folder 1/file 1
backup/folder 1/file 2
backup/folder 1/subfolder/file A
backup/folder 2/file 1
...

不正确的目录结构:

backup/folder 1/folder 1/file 1
backup/folder 1/folder 1/file 2
backup/folder 1/folder 1/subfolder/file A
backup/folder 2/folder 2/file 1
...

请注意,我不希望子文件夹中的文件移动到文件夹 1 中,但我确实希望子文件夹本身向上移动一级。

我已经尝试了一些与此类似的命令,基于此处有些相关的线程,但没有得到它的工作,而是尝试将文件移动到当前目录。我做错了什么?

find . -mindepth 3 -maxdepth 3 -exec sh -c 'mv -v {} ..' \;

您可以调整这些行:

for file in *
do
    if [ -d "$file" ]; then
    cd "$file"
    if [ -d "$file" ]; then
        cd "$file"
        mv * ..
        cd ..
        #rm -r "$file"
    fi
    cd ..
    fi
done

这个想法只是在顶层检测一个目录和一个子目录是否具有相同的名称,然后移动父目录中的所有文件。