将文件和文件夹移动到子文件夹

将文件和文件夹移动到子文件夹

我想将所有文件和文件夹从一个目录移动到其子文件夹之一。我该怎么做?

我正在使用 BusyBox 和 Linux。

前任:

将所有文件和文件夹移动/my/path//my/path/subfolder/.

复制,然后删除的解决方案是不可接受的。

谢谢。

答案1

mv * subfolder 

当然,将“子文件夹”目录移动到其自身中会失败,但其他所有内容都会移动

答案2

使用*(通过 shell 扩展)的解决方案无法处理 中的太多对象/my/path/。在这种情况下,您将得到:

argument list too long

这种方法不使用*

cd /my/path/ &&
find . -mindepth 1 -maxdepth 1 ! -name subfolder -exec mv -t subfolder/ {} +

不幸的是-mindepth-maxdepth的选项find不符合 POSIX 标准;我认为-t的选项都不符合。mv

该变体应满足 POSIX:

cd /my/path/ &&
find . ! -name . -prune ! -name subfolder -exec mv {} subfolder/ \;

(我改编了这个 Unix 和 Linux SE 答案)。遗憾的是,它mv会对找到的每个对象进行调用,因此速度很慢。


快速替代方法,只要您可以重新创建目录(最初不存在/my/path/subfolder/也不/my/subfolder/应该存在):

  • 重命名path/subfolder/
  • 重新创建path/
  • 搬进。subfolder/path/

注意,在基于 inode 的文件系统上,无论有多少个对象,这都应该同样快path/。代码:

cd /my/ &&
test ! -e subfolder/ && mv path/ subfolder/ &&
mkdir path/ &&
mv subfolder/ path/

在这种情况下,我&&多次强调如果任何步骤失败,程序应该中止。但是,如果您需要path/subfolder/拥有非默认权限、所有权等,这种方法就不方便了。

答案3

最简单的方法是:

mv !(subfolder) subfolder

'!' 表示“不”,类似于编程语言,其中 mv 会将除子文件夹之外的所有文件和文件夹移动到所需的子文件夹中。

这里描述了诸如移动隐藏文件夹和点文件夹之类的其他内容:https://askubuntu.com/questions/91740/how-to-move-all-files-in-current-folder-to-subfolder

答案4

您可能想查看该mv命令。您可以尝试搜索目录中的所有文件和文件夹并排除子目录,然后使用findmv命令将找到的所有内容复制到该子目录中。

请参阅类似的 stack-overflow 问题https://stackoverflow.com/questions/4612157/how-to-use-mv-command-to-move-files-except-those-in-a-specific-directory

相关内容