Предполагаемая локальная папка, как показано ниже:
/test/subfolder
/test/subfolder/file1.txt
/test/subfolder/page1.htm
/test/subfolder/page2.htm
/test/.hiddenfolder
/test/./hidenfolder/file2
Как исключить .hiddenfolder для передачи при выполнении "scp -r test user @ ip: /"?
Как включить только файлы * .htm и перенести их в соответствующую подпапку на удаленном сервере?
Любые другие команды могут сделать эту работу проще?
Я не думаю, что только 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
Если у вас уже есть общие ключи 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
Я думаю, это то, что вы ищете.