如何移动/复制目录中的大量文件(不是所有文件)?
我得到一个目录,其中包含大约 9000 个文件,文件名按升序排列(但不一定是连续的)。
现在我需要将大约 3000 个文件从编号 xxxx 复制/移动到编号 yyyy 到另一个目录。如何使用 cp 或 mv 命令来实现此目的?
I got a directory which contains approx 9000 files, the file names are in ascending number (however not necessarily consecutive).
Now I need to copy/move ~3000 files from number xxxx to number yyyy to another direcotory. How can I use cp or mv command for that purpose?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果要限制为 3000 个文件,请执行以下操作:
如果文件在数字后具有公共后缀,请在 if 内使用 ${file%%suffix} (您可以在后缀中使用 glob)。
If you want to limit to 3000 files, do:
If the files have a common suffix after the number, use ${file%%suffix} inside the if (you can use globs in the suffix).
您可以使用
seq
实用程序为此类操作生成数字:缺点是,这将比 QuantumMechanic 的解决方案更频繁地执行
cp
;但如果所有文件名的总长度大于内核的 argv 大小限制(可能在 128K 到 2048K 之间,具体取决于您的内核版本和堆栈大小限制),QuantumMechanic 的解决方案可能无法执行;请参阅execve(2)
了解详细信息)。如果您想要的范围跨越几个数量级(例如,在
900
和1010
之间),那么seq -w
选项可能有用,它为零- 填充输出数字。You can use the
seq
utility to generate numbers for this kind of operation:On the downside, this will execute
cp
a lot more often than QuantumMechanic's solution; but QuantumMechanic's solution may not execute if the total length of all the filenames is greater than the kernel'sargv
size limitation (which could be between 128K and 2048K, depending upon your kernel version and stack-size rlimits; seeexecve(2)
for details).If the range you want spans orders of magnitudes (e.g., between
900
and1010
) then theseq -w
option may be useful, it zero-pads the output numbers.这不是最优雅的,但是像这样的东西怎么样:
它将复制名为 4625 到 6353 的文件到
otherDirectory
。 (您不想使用类似4*
的内容,因为这会复制文件4
、42
、483
等)This isn't the most elegant, but how about something like:
which would copy files named 4625 to 6353 inclusive to
otherDirectory
. (You wouldn't want to use something like4*
since that would copy the file4
,42
,483
, etc.)