para problema de loop, detecta arquivo com tamanho e copia independentemente do nome

0

A situação:
Eu quero copiar todos os arquivos odt com tamanho maior que 0 de uma pasta para outra. Os nomes dos arquivos conterão os seguintes caracteres: +% & [(e espaços.

Aqui está minha tentativa:

#!/bin/bash

mvfunc ()
{
        if [ -s "$1" ]; then
                cp -n "$1" /home/telas/zztmp/currentfiles/
                /usr/bin/truncate -s 0 "$1"
                return 0
        fi
}

fileslist=$(ls --quoting-style=shell-always /home/telas/zzz/workingfiles/*.odt)

for filename in "$fileslist" ; do
        mvfunc "$filename"
done

Toda ajuda é muito apreciada !!

    
por TelamonAegisthus 19.03.2016 / 13:06

1 resposta

2

Você deve usar a expansão do nome do caminho ( globbing ) no Bash do que confiar em comandos externos como ls .

Se um loop for contiver curingas, o Bash usará globbing por padrão, para que os caracteres especiais não sejam confundidos como se estivessem interpretando os parâmetros fornecidos como uma sequência de texto resultante da substituição de comandos.

E o código será mais limpo e mais portátil, porque a opção --quoting-style= é específica do GNU ls:

#!/bin/bash

mvfunc ()
{
        if [ -s "$1" ]; then
                cp -n "$1" currentfiles
                /usr/bin/truncate -s 0 "$1"
                return 0
        fi
}

for filename in /home/telas/zzz/workingfiles/*.odt; do
        mvfunc "$filename"
done
    
por 19.03.2016 / 13:27