我的文件夹结构是这样的:
/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进程wait
和poll_s
状态。
有谁知道发生了什么事?解决方案可能是什么?
更新:基于评论的一些澄清:
- 移动还是复制?那么最终的目标就是“移动”。但我也想知道如何复制。
- 发生了什么 - 是的我想知道发生了什么以及为什么我的命令没有按预期工作。我希望学习一些东西,因为我不是普通的linux用户。
- 解决方案可能是什么?好吧,我也想知道这一点。:)
- 什么是内部
eaDir
文件夹?更多文件夹,然后是其中的一些文件。如果它有帮助,整个事情就从这开始:https://github.com/mbrrg/synology-thumbgen。作者建议删除现有@eaDir
文件夹并简单地重命名eaDir_tmp
。但我不能这样做,因为现有的文件夹包含我想保留的文件。我可以解释一下,但我认为这个问题会更加混乱。 execdir
工作 - 在某种意义上它不会说无效的参数或抛出任何错误。但它没有实现目标 - 即正确复制文件。- 我有多富有
find
?这是我的Synology NAS内部,我认为它正在运行BusyBox?不过不确定。我怎么知道的? - 如果目标文件存在,那么如果source更新,我想覆盖它。否则不是。
@KamilMaciorowski添加了您的问题的答案。希望有所帮助。
—
Mrchief
发表于Linux SE:unix.stackexchange.com/questions/83711 / ...
—
Mrchief
eaDir_tmp
?如果是这样,你想用它们和它们的内容做什么?如果已存在@eaDir
与要复制的文件同名的文件,该怎么办?你能说出你的选择有多丰富find
吗?它是否理解非POSIX-execdir
选项?