Unix:从多个子目录批量移动文件1级

时间:2014-09-09 08:47:15

标签: macos unix terminal directory batch-processing

如何在一个终端命令中将文件从多个子目录中移出1级?

文件结构:
路径/到/文件/ A /删除/ image.png
路径/到/文件/ B /删除/ image.png
路径/到/文件/ C /删除/ image.png
路径/到/文件/ d /删除/ image.png
路径/到/文件/ E /删除/ image.png

所需结构:
路径/到/文件/ A / image.png
路径/到/文件/ B / image.png
路径/到/文件/ C / image.png
路径/到/文件/ d / image.png
路径/到/文件/ E / image.png

有很多目录,每个"字母"上面的目录包括几个图像。 此外,还想删除文件的目录。

3 个答案:

答案 0 :(得分:1)

有很多方法可以做到。

这会将所有文件移动到其祖父目录:

$ find path/to/files -type f -exec mv {} $(dirname $(dirname {})) \;

您可以添加-name \*.type或其他内容,而不是-type f选项,以便更具体。

这将删除空目录:

$ find . -type d -empty -exec rmdir {} \;

(虽然它会产生良性错误,我猜是因为在find仍在工作时目录结构已被更改)。

答案 1 :(得分:1)

我有相同的要求(在Mac上),但在我的情况下,子目录与原始问题中的名称不同,使其更复杂一些。这对我有用:

从我运行的“path / to”文件夹

find .  -mindepth 3 -maxdepth 3 -type f | awk -v sq="'" -F "/" '{print "mv -i " sq $0 sq " " sq  "./" $2 sq}' > moveup.sh

然后

sh moveup.sh

答案 2 :(得分:0)

我找到了解决问题的方法......

使用原始问题中的示例目录,我使用了以下命令:

for a in $(find path/to/files -maxdepth 1 -type d); do mv $a/remove/* $a/; rmdir $a/remove; done

“remove”是我想在每个目录中移出文件的子目录的名称。

答案实际上是在这里找到的:
https://serverfault.com/questions/405146/how-to-mass-move-files-one-directory-up