【问题标题】:smbclient script putting several files with variablesmbclient 脚本放置几个带有变量的文件
【发布时间】:2016-11-24 19:25:29
【问题描述】:

我想用 smbclientscript 将包含 pdf 文件的整个目录放在另一台服务器上。我的脚本:

    #Set variable for reports
variable=`ls | grep pdf`

smbclient -U "server\user"%pw //some/direc/tory/bla/bla << Commands
cd to/another/dir
put $variable
exit
Commands

它确实有效,但问题在于它只能复制第一个文件 listet bei ls | grep.pdf。 对于其他文件,shell 以 file:command not found 响应。

【问题讨论】:

    标签: linux shell samba


    【解决方案1】:

    在 bash 中

    variable=`ls |grep pdf`
    

    将获得一个带有 STDOUT 的字符串变量,而不是一个数组。这不是你想要的。

    也许xargs 会帮助你。您可以执行以下操作,但我认为这不是一个优雅的解决方案。

    ls | grep '.pdf$' |xargs -I{} smbclient -U "server\user"%pw //some/direc/tory/bla/bla -D 'to/another/dir' -c "{}"
    

    【讨论】:

    • 抱歉我的错字。这是-I 不是-i。我确实知道如何使用subclient,但xargs 应该可以解决您的问题,而且它是一个很棒的工具,您可以看到它是如何在*UNIX 中使用man xargs 工作的。你也可以试试这个命令ls | grep '.pdf$' |xargs -I{} smbclient -U "server\user"%pw //some/direc/tory/bla/bla -D 'to/another/dir' -c "{}"
    【解决方案2】:

    我自己就有了解决方案:

    cd /directory/with/files/to/copy
    #Set Variable
    reports=$(ls *)
    for i in $reports ; do
    
        smbclient -U "srv\User"%pws //some/dir/bla/bla/bla << Commands
        cd another/dir/etc
        put $i
        exit
        Commands
        done
    

    谢谢!

    【讨论】:

    • 当您的文件名之一有空格时,这将导致问题。比如这个文件this is a test.pdf会引出4个文件thisisatest.pdf,这是因为bash扩展时会使用IFS变量的值作为分隔符,默认值IFS,所以当文件名包含空格时会导致问题。要解决这个问题,您可以使用IFS=$(echo -e '\t') 来设置带有 的IFS。并在 for 块中,确保用双引号括住 $i
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多