假定本地文件夹如下:
/test/subfolder
/test/subfolder/file1.txt
/test/subfolder/page1.htm
/test/subfolder/page2.htm
/test/.hiddenfolder
/test/./hidenfolder/file2
如何在执行“scp -r test user@ip:/”时排除要传输的.hiddenfolder?
如何仅包含 *.htm 文件并将其传输到远程服务器上相应的子文件夹?
还有其他命令可以更轻松地完成这项工作吗?
答案1
我认为 scp 本身无法满足您的要求。您应该研究一下 rsync。
我使用它进行备份,并使用过滤器排除那些在 NTFS 卷上不起作用的文件
# the exclude is to filter out files with invalid names on NTFS
/usr/bin/rsync -rgqoxD --delete --exclude='*[:\?]*' /home/andrewr/src /filer001/syncd/src
您还可以将包含要排除的文件的文件的名称传递给它(--exclude-from=file
)
编辑:这是适用于您的示例的示例命令行:
cd src; find . -type f -name "*.htm" | rsync -av --files-from=- . host:dir
答案2
如果您已经拥有预共享的 ssh 密钥,则可以首先按照以下方式创建所有远程目录:
# get all directories in this tree
for DIR in `find . -type d`
do
# create remote directory
ssh user@host mkdir -p /path/to/start/$DIR
# copy *only* *.htm files
scp $DIR/*.htm user@host:/path/to/start/$DIR
done
我想这就是你要找的东西。