将文件夹中的所有文件复制到另一个文件夹并附加 .到文件名并将其重命名回原始文件名

将文件夹中的所有文件复制到另一个文件夹并附加 .到文件名并将其重命名回原始文件名

经过搜索和尝试各种方法后我无法让它工作。

我需要将大量文件(超过 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/.{} \;

我知道上面的命令不会做我想要的事情,这就是我已经厌倦的事情。

感谢任何可以提供帮助的人...

答案1

rsync -a -T tmpdir /foo/bar/ /foo2/bar

(请注意,/末尾的/foo/bar/很重要。)

该实用程序将在将文件移动到 下的正确名称之前rsync写入文件。例如,您可以使用下面的隐藏目录来存储传输中的文件:tmpdir/foo2/bar/foo2/bar

mkdir -p /foo2/bar/.tmp
rsync -a -T /foo2/bar/.tmp /foo/bar/ /foo2/bar

另请参阅rsync手册,尤其是有关该选项的部分-T

上述命令将递归/foo/bar复制到/foo2/bar.要禁用递归性,请使用rsync -a --no-recursive ...(该-a选项启用递归以及文件元数据同步,并--no-recursion仅关闭 的递归方面-a)。

相关内容