find + xargs - 将文件从一个子目录移动到另一个子目录


1

我的文件夹结构是这样的:

/volume1
  /photoTest
    /folderA
      /@eaDir
      /eaDir_tmp 
    /folderB
      /@eaDir
      /eaDir_tmp 
    /folder with space
      /@eaDir
      /eaDir_tmp 

我要做的是将文件从每个文件复制eaDir_tmp到各自的@eaDir文件夹。

我能够通过以下方式获得:

for a in $(find /volume1/photoTest -type d -name eaDir_tmp); do rsync -vhar --chmod=a+rwx $a/ $a/../@eaDir; done;

直到我用空格打到文件夹。上面的脚本只是简单地解决了。

经过大量的谷歌搜索,我试过:

find /volume1/photoTest -type d -name eaDir_tmp -print0 | xargs -0 rsync -vhra --chmod=a+rwx {} {}/../@eaDir

此命令的空运行没有问题。但打印后实际运行会卡住。

sending incremental file list
@eaDir/subdir1/

并卡在上面。

ps -elf | grep rsync显示一堆rsync进程waitpoll_s状态。

有谁知道发生了什么事?解决方案可能是什么?

更新:基于评论的一些澄清:

  • 移动还是复制?那么最终的目标就是“移动”。但我也想知道如何复制。
  • 发生了什么 - 是的我想知道发生了什么以及为什么我的命令没有按预期工作。我希望学习一些东西,因为我不是普通的linux用户。
  • 解决方案可能是什么?好吧,我也想知道这一点。:)
  • 什么是内部eaDir文件夹?更多文件夹,然后是其中的一些文件。如果它有帮助,整个事情就从这开始:https//github.com/mbrrg/synology-thumbgen。作者建议删除现有@eaDir文件夹并简单地重命名eaDir_tmp。但我不能这样做,因为现有的文件夹包含我想保留的文件。我可以解释一下,但我认为这个问题会更加混乱。
  • execdir工作 - 在某种意义上它不会说无效的参数或抛出任何错误。但它没有实现目标 - 即正确复制文件。
  • 我有多富有find?这是我的Synology NAS内部,我认为它正在运行BusyBox?不过不确定。我怎么知道的?
  • 如果目标文件存在,那么如果source更新,我想覆盖它。否则不是。

你的问题是“发生了什么事?” 或“解决方案可能是什么?”。这些是不同的问题。标题说“移动”,问题机构说“复制”。请下定决心。目录下是否有子目录eaDir_tmp?如果是这样,你想用它们和它们的内容做什么?如果已存在@eaDir与要复制的文件同名的文件,该怎么办?你能说出你的选择有多丰富find吗?它是否理解非POSIX -execdir选项?
Kamil Maciorowski

@KamilMaciorowski添加了您的问题的答案。希望有所帮助。
Mrchief

Answers:


0

不知道为什么rsync会卡住。但我能够使用2个命令取得一些进展:

首先,复制所有文件:

find /volume1/photo -type d -name eaDir_tmp -exec cp -a -t {}/../@eaDir {}/. \;

其次,更改文件权限:

find /volume1/photo -type d -name @eaDir -exec chmod 777 {} -R \;

这不仅笨拙而且速度慢,但这感觉就像我在处理MS-DOS。linux大师在哪里?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.