将所有文件在一个级别上移一级

时间:2016-10-26 19:02:18

标签: linux bash shell directory move

我在linux服务器上有一个备份问题,它以某种方式将文件的所有文件夹向下移动到一个具有相同名称的新文件夹中。我想将所有文件返回到原始位置。许多文件的名称中都有空格使事情复杂化。

原始目录结构:

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中,但我确实希望子文件夹本身向上移动一层。

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

  找到。 -mindepth 3 -maxdepth 3 -exec sh -c'mv -v {} ..'\;

1 个答案:

答案 0 :(得分:1)

您可以调整以下几行:

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

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