Exclui o arquivo quando os diretórios de upload

0

Eu escrevi um script de shell simples que usa ncftpput para fazer o upload recursivo de todos os diretórios em um diretório local para um diretório remoto. Meu script de shell, upload.sh é colocado neste diretório local e eu gostaria de excluí-lo do upload. Existe alguma maneira de fazer isso?

ncftpput -R -v -u myUsername -p myPassword myAddress /remoteDir /localDir/*

Eu tentei fazer assim:

for i in 'ls /localDir | grep -v upload.sh'; do
  ncftpput -R -v -u myUsername -p myPassword myAddress /remoteDir /localDir/$i
done

Mas os diretórios com espaços serão considerados dois diretórios. Por exemplo. "Meu diretório" será considerado:

  1. / localDir / My
  2. / localDir / Directory
por SimonBS 29.12.2011 / 13:54

2 respostas

2

É por isso que você deve nunca analisar a saída de ls . Especialmente se você puder fazer a mesma coisa com um curinga simples.

#!/usr/bin/env bash

for i in /localDir/*; do
    [[ "$i" = */upload.sh ]] && continue
    ncftpput -R -v -u myUsername -p myPassword myAddress /remoteDir "$i"
done
    
por 29.12.2011 / 14:01
5

Você pode usar "Localizar" para enviar todos os outros elementos separadamente:

find /localDir -mindepth 1 -maxdepth 1 ! -name "upload.sh" -exec ncftpput -R -v -u myUsername -p myPassword myAddress /remoteDir {} \;

Ignore o -exec e tudo depois dele para imprimir os arquivos e pastas correspondentes, para testes ...

Você também pode procurar redefinir IFS no bash ou o equivalente no seu shell, mas isso ainda falhará com nomes de arquivo contendo, por exemplo, novas linhas.

É claro que a solução mais simples seria não misturar o script uploader com os dados a serem enviados ...

    
por 29.12.2011 / 13:58

Tags