如何在一个终端命令中将文件从多个子目录中移出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
有很多目录,每个"字母"上面的目录包括几个图像。 此外,还想删除文件的目录。
答案 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