包含/排除“scp -r”的文件

包含/排除“scp -r”的文件

假定本地文件夹如下:

/test/subfolder
/test/subfolder/file1.txt
/test/subfolder/page1.htm
/test/subfolder/page2.htm
/test/.hiddenfolder
/test/./hidenfolder/file2
  1. 如何在执行“scp -r test user@ip:/”时排除要传输的.hiddenfolder?

  2. 如何仅包含 *.htm 文件并将其传输到远程服务器上相应的子文件夹?

  3. 还有其他命令可以更轻松地完成这项工作吗?

答案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

我想这就是你要找的东西。

相关内容