我的文件夹结构如下:
/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?但不确定。我如何找出答案? - 如果目标文件存在,并且源文件较新,则我想覆盖它。否则不覆盖。
答案1
不确定为什么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 专家在哪里?