【发布时间】:2020-05-03 03:06:40
【问题描述】:
在搜索并尝试了各种方法后,我无法让它工作。
我需要将大量文件(超过 10 万个文件)复制到另一个文件夹,并在文件名前加上点示例:
/foo/bar/filename1.txt 到 /foo2/bar/.filename1.txt
然后将其重命名为原始名称 /foo2/bar/filename.txt
为什么我需要这样做是因为我有一个应用程序会继续扫描 /foo2/bar 文件夹及其子文件夹,并忽略文件名前面带有点的那些文件,这样它就不会处理那些正在复制一半。这主要是因为 2 个文件夹可以位于 2 个不同的网络驱动器或某些已安装的设备中。
而且我不能简单地使用 mv 或 cp,因为我有一些文件夹有太多文件,它只会抛出参数列表太长的错误,因此我一直在尝试使用 find 命令但无济于事。
尝试不同的命令:
find /foo/bar/ -type f -exec cp -t /foo2/bar {} +
和
find /foo/bar/ -type f -exec mv {} /foo2/bar/.{} \;
我知道上面的命令不会做我想要的,但那是我已经厌倦了。
感谢任何可以提供帮助的人...
【问题讨论】:
-
将整个结构复制到
/foo3,完成后,将/foo3重命名为/foo2。这样,扫描/foo2的应用程序就不会被复制一半的文件所欺骗,直到复制完成并将文件夹重命名为其最终名称。 -
我认为我不能这样做,因为 /foo2 可能是网络驱动器文件夹,例如 samba 服务器
-
你不能把文件tar成.mytar.tar.gz然后解压吗?
-
你的意思是在删除点之前必须复制所有文件?或者每个文件的点可以在该特定文件的副本完成后立即删除?
-
@JL007 作为网络驱动器的问题是什么?您可以在同一网络驱动器中创建
/foo3,复制完成后,只需重命名该文件夹即可。重命名将是即时的。
标签: linux bash centos7 file-rename file-copying