参数列表太长,复制到 Samba Share

参数列表太长,复制到 Samba Share

Ubuntu 12.04 LTS 64 位。

我正在尝试执行计划任务,将包含数千个文件的目录复制到 Samba 共享(同时跳过重复项)。我通过 GUI 映射了 Samba 共享。

我尝试过的命令:

cp /home/security/Brick/* ~/.gvfs/“atm-bak-01.local/Brick 上的摄像头”-n

我找到了这个,但我不知道如何将语法更改为我需要的。

查找 -maxdepth 1 -name'*.prj'-exec mv -t../prjshp{}+

如能提供任何提示我将不胜感激。

答案1

问题是 shell 会/home/security/Brick/*用一长串(太长)的文件列表来扩展你的将其传递给cp

如果你想复制所有Brick目录也许最直接的事情是:

cp -rn /home/security/Brick ~/.gvfs/"cam on atm-bak-01.local"/

使用“递归”标志cp。这也会复制 Brick 下的所有结构(包括子目录)。

一种可能性是使用for循环:

for file in /home/security/Brick/*; 
do
cp -n $file ~/.gvfs/"cam on atm-bak-01.local/Brick"
done

或者使用查找:

find /home/security/Brick/ -type f -exec cp -n {} ~/.gvfs/"cam on atm-bak-01.local/Brick" \;

在这个命令中,-type f表示仅选择文件(没有目录),然后对每个文件执行指定的命令:{}用文件名替换,\;是关闭子句所需的分号-exec,否则 shell 将对其进行转义(并删除)。

后面的命令-exec可以是任何你想要的(例如,cp -n你可以使用cp -av来以存档模式复制(包括时间戳和适当性)并覆盖,或者你可以使用其他命令(:你应该先了解 shell 转义、通配符和引号,否则你可能会造成很大的危害 --- 例如参见“学习 shell”)。

Find 是一个非常强大的命令 --- 值得好好学习。我发现了一些有趣的教程这里这里这里

关于使用以下方式进行备份cp -n

请注意,该-n标志不会覆盖现有文件,因此如果您对之前复制的本地目录中的文件进行更改,它将不是再次复制...您将在备份中获得它的旧版本。

因此,我建议使用备份或同步实用程序,例如齐奏或者同步来完成这项工作。这些实用程序只会更新已更改的文件,可以最大限度地减少写入(以及网络带宽),并且通常更安全。rsync只需说一句:

rsync -azvv  /home/security/Brick   ~/.gvfs/"cam on atm-bak-01.local/Brick"

(注意不要在末尾添加“/”---否则 rsync 将创建子目录 Brick/Brick。是的,rsync功能强大,有时还相当不稳定。)

Unison 有一个很好的图形界面,还会告诉您存储库中是否存在冲突的变化 --- 所以这是我的首选选项。

相关内容