假设我们有一个/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'
应排除的目录名称)而意外执行。