Назад | Перейти на главную страницу

включить / исключить файлы для «scp -r»

Предполагаемая локальная папка, как показано ниже:

/test/subfolder
/test/subfolder/file1.txt
/test/subfolder/page1.htm
/test/subfolder/page2.htm
/test/.hiddenfolder
/test/./hidenfolder/file2
  1. Как исключить .hiddenfolder для передачи при выполнении "scp -r test user @ ip: /"?

  2. Как включить только файлы * .htm и перенести их в соответствующую подпапку на удаленном сервере?

  3. Любые другие команды могут сделать эту работу проще?

Я не думаю, что только 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

Я думаю, это то, что вы ищете.