concatenando nomes de arquivos em uma variável

1

Eu estou tentando concatenar nomes de arquivos para usar em um comando ftp mdelete. Cada nome de arquivo precisa ser separado por um espaço para que o comando mdelete funcione. A variável $ i está em um loop e eu estou tentando atribuir o nome do arquivo localizado em $ i a $ FILESTODELETE em adição aos nomes de arquivo já em $ FILESTODELETE

  for i in 'ls'
    do    
    $FILESTODELETE = "$FILESTODELETE $i "
        .....
     END
......     

mdelete $FILESTODELETE
    
por Anthony 18.06.2015 / 22:55

2 respostas

2
set -- *
filenames="$*"

Contanto que você não tenha modificado o valor do seu ambiente para $ IFS, o que precede é tudo o que você precisa para obter todos os nomes de arquivos não pontuados no diretório atual em uma única sequência dividida por espaços e classificada por locale em qualquer shell POSIX. Se você modificou o $ IFS, então qualquer que seja seu primeiro caractere será sub para o divisor de espaço único que acabou de ser mencionado.

Note, porém, que o acima não é garantia de que os nomes de arquivos não contenham espaços ou novas linhas, ou basicamente qualquer caractere, exceto NUL e / ou aqueles que provavelmente não estão nos nomes dos arquivos.

    
por 19.06.2015 / 00:04
2

Com uma nova versão do ksh (não sei exatamente como o novo é novo o suficiente), você deve ser capaz de fazer:

files_to_delete=( * )
...
mdelete ${files_to_delete[@]}

A primeira linha cria files_to_delete como uma matriz cujos elementos são os arquivos em seu diretório atual (retornados pelo * glob) e a segunda linha expande files_to_delete como um espaço separado (assumindo o valor padrão de $IFS ) string.

Ou, com qualquer shell compatível com POSIX, você poderia evitar a variável inteiramente e ir diretamente com:

mdelete $(echo *)
    
por 19.06.2015 / 00:00