Você poderia usar um loop for para simplificar isso. Eu usei o dirname $ tiem / .. para obter um nível acima e o mindepth para limitar o efeito a um nível.
localhost$ tree
.
└── temp
├── folder1
│ ├── subfolder1
│ │ └── file1
│ └── test1.txt
├── folder2
│ ├── subfolder2
│ │ └── file2
│ └── test2.txt
└── folder3
├── subfolder3
│ └── file3
└── test3.txt
7 directories, 6 files
/tmp/foo/new
localhost$ for item in 'find . -mindepth 4 -type f'; do echo $item 'dirname $item'/..; done
./temp/folder1/subfolder1/file1 ./temp/folder1/subfolder1/..
./temp/folder3/subfolder3/file3 ./temp/folder3/subfolder3/..
./temp/folder2/subfolder2/file2 ./temp/folder2/subfolder2/..
Após a mudança, torna-se
localhost$ for item in 'find . -mindepth 4 -type f'; do mv $item 'dirname $item'/..; done
/tmp/foo/new
localhost$ tree
.
└── temp
├── folder1
│ ├── file1
│ ├── subfolder1
│ └── test1.txt
├── folder2
│ ├── file2
│ ├── subfolder2
│ └── test2.txt
└── folder3
├── file3
├── subfolder3
└── test3.txt
7 directories, 6 files
/tmp/foo/new
localhost$
Espero que ajude.