如何使用命令行将所有文件从一个文件夹移动到另一个文件夹?


245

我想知道如何使用命令行将所有文件从一个文件夹移动到另一个文件夹。

假设我位于“下载”文件夹中,我想将100个文件移到“视频”文件夹中,而不必写下所有文件名。


你问有关移动files,但人们向你展示如何不仅移动files,但folders也。这可以吗?
阿斯卡

2
@HontváriLevente一年前给出了一个答案,它似乎是迄今为止最好,最简洁,最简单的方法,并且可以正常工作。那么,它是如何仅获得3票的(与目前顶部的262票相比)?
雷·巴特沃思

Answers:


331

打开一个终端并执行以下命令:

mv  -v ~/Downloads/* ~/Videos/

它将所有文件和文件夹从“下载”文件夹移动到“视频”文件夹。


要移动所有文件,但不能移动文件夹:

如果您有兴趣将所有文件(而非文件夹)从“下载”文件夹移动到“视频”文件夹,请使用此命令

find ~/Downloads/ -type f -print0 | xargs -0 mv -t ~/Videos

要仅移动“下载”文件夹中的文件,而不移动子文件夹中的文件,请执行以下操作:

如果要移动“下载”文件夹中的所有文件,而不是“下载”文件夹中文件夹中的任何文件,请使用以下命令:

find ~/Downloads/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Videos

在这里,-maxdepthoption指定了find应该尝试的深度,1即仅find命令中指定的目录。您可以尝试使用23也可以进行测试。

有关详细说明,请参见Ubuntu 查找手册页


3
您可以单独使用mv将整个目录移动到另一个文件夹:mv文件夹〜/ Documents
JohnMerlino 2014年

20
仅供参考,我相信您的第一个命令(“ mv -v〜/ Downloads / *〜/ Videos /”)不会移动点文件。
Mark Doliner 2014年

1
是的,它不会移动.files
Anwar

3
Nb。您-print0 | xargs -0 mv -t ~/Videos可以使用-exec mv -t ~/Videos \{\} \+:-) 来更有效地完成工作
artfulrobot

3
mv -v ~/Downloads/* ~/Videos/不适用于隐藏文件
FreeLightman

28
mv ~/Downloads/* ~/Videos

它将移动所有文件(包括子文件夹)到您想要的目录中mv。如果要cp(复制)或rm(删除),则需要-r(递归)选项包括子文件夹。


2
我的mv命令没有-R选项(Ubuntu 14.04)。
Mark Doliner 2014年

1
@MarkDoliner,是的,mv不需要递归选项来包含子文件夹。也可以将其用于重命名。
Alen

我不需要*。没有使用星星也发生了同样的事情。
MycrofD

文件夹名称前缀中的〜/并不总是有效(不适用于bash和git atleast)
Krish Munot

如果源目录为空,则此解决方案将产生错误。
皮埃尔·锡伯

11

对于简单的情况:

mv ~/Downloads/* ~/Videos

如果您也要移动点(隐藏)文件,请设置dotglob shell选项。

shopt -s dotglob
mv ~/Downloads/* ~/Videos

这将保留shell选项集。

要使用dotglob一次,请在子外壳程序中运行以下命令:

(shopt -s dotglob; mv ~/Downloads/* ~/Videos)

给自己的说明:最后一个选项(shopt -s dotglob; mv ~/Downloads/* ~/Videos) 移动(剪切)内容(包括隐藏的文件)。在这种情况下,原始文件夹和目标文件夹都必须已经存在。最后,原始目录变为空。
Pathros

这应该是公认的答案
梅加尔

11

可以使用rsync,例如:

rsync -vau --remove-source-files src/ dst/

哪里:

-v--verbose:增加详细程度。

-a--archive:存档模式;等于-rlptgoD(无-H-A-X)。

-u--update:跳过接收方上较新的文件。

--remove-source-files 这告诉rsync从发送方删除文件(即非目录),这些文件是传输的一部分,并且已在接收方成功复制。

如果您具有root权限,请在前面加上前缀sudo以覆盖潜在的权限问题。


1
警告!如上所述的--delete-after选项无法按您期望的方式工作。成功复制后,它不会删除文件... 它会删除目的地中的所有剩余文件/其他文件。(正如@kenorb所指出的...但是我没有足够仔细地阅读!DOH)
Jay Marm

4

采用

mv -v ~/rootfolder/branch/* ~/rootfolder

我希望这有帮助。因为我有同样的痛苦,浪费了很多时间来纠正我的错误。


2

要将包含或不包含内容的目录移动到新名称,就像使用mv命令重命名文件的方式一样:

mv -T dir1 dir2

哪里:

  • -T 将目标视为普通文件
  • dir1 是目录的原始名称
  • dir2 是目录的新名称

注意:dir2不必存在。

我希望这可以为某人节省很多时间,作为一个菜鸟,在此之前,我将使用新名称创建目录,然后将目录的内容移至之前创建的目录。

用于子目录

当许多文件已保存在目标目录的子文件夹中时,此命令很有用Downloads/mp4。在此示例中,运行mv -T Downloads/mp4 Videos将导致mp4子文件夹被删除,并且其中包含的所有文件都将移至“视频”文件夹。


1
+1是因为经过测试在Xubuntu 14.04中可以正常工作。我在此答案中添加了一个示例,以显示此命令将导致dir1删除。除了这种预防措施,该答案还指出了一些日常使用的好处。
clearkimura

1
“将包含或不包含内容的目录移动到新名称”如何将目录...移动到名称?这是没有意义的。“ -T将目标视为普通文件”目标如何成为文件?你是指目录吗?
莫妮卡·赫德内克

就像您将文件重命名为新名称一样,mv fileA fileB但是-T在这种情况下,标志会将目标/目录视为文件并重命名。
Feyisayo Sonubi '17

为我工作:)
Naveen Kumar V

1
  1. 转到命令行并进入要将其移动到的目录 cd folderNamehere
  2. 输入pwd。这也将打印您要移动的目录。
  3. 然后转到所有文件所在的目录 cd folderNamehere
  4. 现在移动所有文件类型 mv *.* typeAnswerFromStep2here

这样会将所有文件从该目录移动到另一个目录。


3
没有任何扩展名的文件将不匹配。例如,如果一个文件夹有文件:foo.txtbar.并且barbar.bar不会移动。使用*代替代替*.*照顾。但是在两种情况下,.foobar都不会移动诸如:的隐藏文件。
2013年

1
mv source_path/* destination_path/

在这里,您必须*在源路径后面加上斜杠,以便它将文件包含在source_path而不是完整的源目录中。

例: mv /home/username/test/* /home/username/test2/

上面的命令将源目录中的所有文件(除非它们被隐藏)移动到目标目录。


0

试试吧

find ~/Desktop -type f -iname  "*.mp4" -exec mv {} ~/Videos \;

-type 与参数-type一起可以指定类型file。在此语句上是平均文件。如果使用-d表示目录。

-iname: 查找文件的最常见,最明显的方法是使用-name参数。如果不确定文件是否区分大小写,则可以使用-iname参数

mv {} ,最后指定目标目录,然后使用mv {}参数将文件移动到该目录

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.