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

Mic*_*ael 369 command-line

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

假设我在我的 Downloads 文件夹中,有 100 个文件我想移动到我的 Videos 文件夹中,而不必写下所有文件名。

Anw*_*war 468

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

mv  -v ~/Downloads/* ~/Videos/
Run Code Online (Sandbox Code Playgroud)

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


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

如果您有兴趣将所有文件(但不是文件夹)从 Downloads 文件夹移动到 Videos 文件夹,请使用此命令

find ~/Downloads/ -type f -print0 | xargs -0 mv -t ~/Videos
Run Code Online (Sandbox Code Playgroud)

仅移动下载文件夹中的文件,而不移动子文件夹中的文件:

如果要移动 Downloads 文件夹中的所有文件,但不移动 Download 文件夹中文件夹中的任何文件,请使用以下命令:

find ~/Downloads/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Videos
Run Code Online (Sandbox Code Playgroud)

在这里,-maxdepth选项指定了 find 应该尝试的深度,1意味着,只有在 find 命令中指定的目录。您可以尝试使用2,3也进行测试。

有关详细说明,请参阅 Ubuntu find 联机帮助页

  • 仅供参考,我相信您的第一个命令(“mv -v ~/Downloads/* ~/Videos/”)不会移动点文件。 (29认同)
  • `mv -v ~/Downloads/* ~/Videos/` 不适用于隐藏文件 (7认同)
  • 对于隐藏文件,技巧“folder/.*”(注意点)有效 - 它说一些繁忙的错误,但移动仍然发生=>来源:https://askubuntu.com/a/399632 (4认同)
  • 您可以单独使用 mv 将整个目录移动到另一个文件夹: mv 文件夹 ~/Documents (3认同)
  • 铌。你的`-print0 | xargs -0 mv -t ~/Videos` 可以更有效地使用 `-exec mv -t ~/Videos \{\} \+` :-) (3认同)
  • 对于其他想知道“-v”意味着“详细”的人(它会给你更多的控制台输出) (3认同)
  • 是的,它不会移动 .files (2认同)

小智 39

mv ~/Downloads/* ~/Videos
Run Code Online (Sandbox Code Playgroud)

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

  • 我的 mv 命令没有 -R 选项(Ubuntu 14.04)。 (2认同)

Hon*_*nte 30

对于简单的情况:

mv ~/Downloads/* ~/Videos
Run Code Online (Sandbox Code Playgroud)

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

shopt -s dotglob
mv ~/Downloads/* ~/Videos
Run Code Online (Sandbox Code Playgroud)

这将保留 shell 选项设置。

使用一次 dotglob,在子 shell 中运行命令:

(shopt -s dotglob; mv ~/Downloads/* ~/Videos)
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案 (2认同)
  • 是的。在 Ubuntu 20.04 上,getconf ARG_MAX 为 2MiB。因此,如果目录中的文件少于 250,000 个,则此方法有效。 (2认同)

ken*_*orb 19

可以通过使用rsync,例如:

rsync -vau --remove-source-files src/ dst/
Run Code Online (Sandbox Code Playgroud)

在哪里:

-v, --verbose: 增加冗长。

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

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

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

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

  • 警告!前面提到的 --delete-after 选项并不像您期望的那样工作。成功复制后它不会删除*源*文件...它会删除目标中的所有剩余/其他文件。(正如@kenorb 所指出的......但我没有仔细阅读!DOH) (4认同)
  • 当作者更正他的答案时,可以忽略/应该删除此警告。 (3认同)

Fey*_*ubi 7

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

mv -T dir1 dir2

在哪里:

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

注意:dir2不一定存在。

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

用于子目录

当许多文件保存在目标目录的子文件夹中时,此命令很有用,即Downloads/mp4. 在本例中,运行mv -T Downloads/mp4 Videos将导致删除mp4子文件夹,并将其中包含的所有文件移动到 Videos 文件夹。


小智 6

mv source_path/* destination_path/
Run Code Online (Sandbox Code Playgroud)

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

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

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


小智 5

使用

mv -v ~/rootfolder/branch/* ~/rootfolder
Run Code Online (Sandbox Code Playgroud)

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