Исключить файл при загрузке каталогов
Я написал простой сценарий оболочки, который использует ncftpput
рекурсивно загрузить все каталоги из локального каталога в удаленный каталог. Мой сценарий оболочки, upload.sh
находится в этом локальном каталоге, и я хотел бы исключить его из загрузки. Есть какой-либо способ сделать это?
ncftpput -R -v -u myUsername -p myPassword myAddress /remoteDir /localDir/*
Я пытался сделать это так:
for i in `ls /localDir | grep -v upload.sh`; do
ncftpput -R -v -u myUsername -p myPassword myAddress /remoteDir /localDir/$i
done
Но каталоги с пробелами будут считаться двумя каталогами. Например, "Мой каталог" будет считаться:
- / LocalDir/ My
- / LocalDir/ Каталог
2 ответа
Вот почему вы никогда не должны анализировать вывод ls
, Особенно, если вы можете сделать то же самое с простым подстановочным знаком.
#! / usr / bin / env bash для меня в / localDir / *; делать [[ "$i" = */upload.sh ]] && продолжить ncftpput -R -v -u myUsername -p myPassword myAddress /remoteDir "$i" сделанный
Вы можете использовать find, чтобы загрузить все остальные элементы отдельно:
find /localDir -mindepth 1 -maxdepth 1 ! -name "upload.sh" -exec ncftpput -R -v -u myUsername -p myPassword myAddress /remoteDir {} \;
Пропустить -exec
и все, что после этого, просто распечатать соответствующие файлы и папки, для тестирования..
Вы также можете посмотреть на переопределение IFS
в bash, или эквивалент в вашей оболочке, но это все равно не удастся с именами файлов, содержащими, например, символы новой строки.
Конечно, самым простым решением было бы не смешивать скрипт загрузки с данными, которые нужно загрузить...