移动大量文件 (~ 100 000)

Hyp*_*ion 14 nautilus transfer batch

我使用包含大量文件的文件夹,例如每个文件夹 100 000 甚至 1 000 000 个文件。当我尝试将一个文件夹的内容移动到另一个文件夹时,我的计算机总是卡住。即使这个过程看起来已经完成,我也看不到任何文件夹的内容,因为 nautilus 似乎完全被冻结了,我不得不强制我的计算机重新启动。我注意到当我尝试移动 10 000 个文件时也会发生这种情况。

这是我的计算机的问题还是使用这些数字时正常?

执行此文件传输的任何智能方法?

and*_*.46 19

或许可以考虑使用纯命令行方式来传输非常大量的文件,你肯定会发现的过程实质上比使用GUI更快。

有许多不同的方法可以实现这一点,但以下方法在我的系统上快速、安全、高效地工作:

find . -maxdepth 1 -type f -print0 | xargs -0 mv -t <destination>
Run Code Online (Sandbox Code Playgroud)

这个命令的一些解释:

  1. 您的输入目录是“.” 字符,对于此特定命令,您需要位于该目录中
  2. 您的输出目录<destination>在我的示例中。显然修改它以满足您自己的需要并省略括号。
  3. 此语法允许使用带有空格的文件名作为奖励:)

无休止的排列是可能的,但这应该比 gui更有效更有效。例如一个置换:如果你想移动只有PDF文件,你可以运行:

find . -iname "*.pdf" -maxdepth 1 -type f -print0 | xargs -0 mv -t <destination>
Run Code Online (Sandbox Code Playgroud)

的使用xargs开辟了许多可能性,特别是在移动如此大量的文件时。很多很多的可能性......

潜在问题:

至少有两个潜在的陷阱需要考虑,感谢以下评论者的这些想法:

  1. 您的目标目录可能已损坏、在随后无法访问的位置、输入错误等mv仍会将文件移动到那里!这里要小心...
  2. 如果缺少-t选项 ( --target-directory) 并且目标文件夹实际上是一个文件,您将移动一个文件并在其余文件上失败。mv有 2 个用途:重命名为目标或移动目录。再次小心...

  • 不只是`find 。-maxdepth 1 -type f -exec mv -t test {} +` 可以吗? (2认同)
  • 我不知道...虽然命令显然是正确的,但我认为一个完整的移动有点太容易出错了。(例如,如果您忘记包含 `-t` 标志怎么办?我认为所有文件都会被“移动”到一个名为 `test` 的单个文件中,导致除了一个文件之外的所有文件都丢失了。)我认为如果一切顺利,我更喜欢 `rsync`,然后是 `rm`。但是,我可以想象无法自动进行此类检查的场景。 (2认同)