仅复制具有数字名称的文件夹

仅复制具有数字名称的文件夹

假设我们有一个/dir/包含很多文件夹的目录。有些文件夹名称是数字,如1, 2, 64346, 2353, 3等。有些包含经典名称some_name, some_other_name, another_name等。如何将名称中仅包含数字的目录从远程复制到本地主机?

我正在寻找类似的东西scp -r username@host:/dir/[all_numerical_names] .

任何想法表示赞赏

答案1

我知道没有办法将远程文件/目录名称与完全数字等标准相匹配。但是,既然您正在使用,scp那么假设ssh也可用似乎是合理的。在此基础上,我将考虑如何解决该问题:

rhost="user@remoteHost"    # Fix as appropriate
rpath="/dir"               # Likewise

ssh -qn "$rhost" "find '$rpath' -maxdepth 1 -type d -print0" |
    while IFS= read -r -d '' item
        do
            if [[ "$item" =~ ^(.*/)?[0-9]+$ ]]
            then
                # Numeric directory
                echo "Copying $item" >&2            # Optional
                scp -r "$rhost":"$rpath/$item" .    # Maybe -a instead of -r
            fi
        done

注意事项

  • find远程系统上需要 GNU (用于-print0
  • 需要bash本地系统(用于read和 RE 比较)
  • 强烈建议基于证书的身份验证(这样就不会重复需要密码)
  • $rpath不得包含双引号或单引号

find如果远程系统上没有 GNU,您可以替换-print0-print,然后调整read -r -d '' item为简单的read -r item.但是,它可能会因“奇怪”的目录名称(例如$'123\ntext\n456'应排除的目录名称)而意外执行。

相关内容