Como usar o ls? opção em uma variável bash?

1

Eu quero usar o ls? opção em uma variável Bash.

Como faço para que o script faça o mesmo que ls -lt foobar_??????.log ?

$ cat foobar_ls.sh 

#!/bin/bash
FOOBAR_LIST="foobar_??????.log"
ls -lt "$FOOBAR_LIST"

Esta é a versão do prompt:

$ls -lt foobar_??????.log
-rw-r--r-- 1 foobar foobiz 0 Nov  1 14:58 foobar_000003.log
-rw-r--r-- 1 foobar foobiz 0 Nov  1 14:58 foobar_000002.log
-rw-r--r-- 1 foobar foobiz 0 Nov  1 14:58 foobar_000001.log

Aqui está a minha versão do script:

$ ./foobar_ls.sh 

ls: cannot access foobar_??????.log: No such file or directory
    
por zundarz 01.11.2017 / 21:16

2 respostas

1

Isso funcionou para mim, mas dependendo do que você está fazendo, provavelmente não é uma boa idéia deixar essa variável sem aspas. Você provavelmente também deve usar algo diferente de ls : link

foobar_ls.sh

#!/bin/bash
FOOBAR_LIST="foobar_??????.log"
ls -lt ${FOOBAR_LIST}

Para renomear esses arquivos, você pode fazer o seguinte:

shopt -s nullglob
for file in /path/to/files/foobar_??????.log; do
        mv "$file" "${file}.old"
done
shopt -u nullglob

ou

find /path/to/files -type f -name 'foobar_??????.log' -exec mv {} {}.old \;
    
por 01.11.2017 / 21:28
2

? não é um recurso de ls , é um recurso do shell chamado expansão de nome de arquivo ou expansão de curinga ou combinação de padrões ou globbing . Você deve permitir que o shell execute a expansão de curingas, para que ls receba a lista de nomes de arquivos correspondentes.

Se você tiver uma string com curingas em uma variável e desejar expandir esses curingas para nomes de arquivos correspondentes, deixe a substituição da variável sem aspas. Este é o operador “split + glob”: o valor é dividido em partes delimitadas por espaços em branco e cada parte é substituída pela lista de nomes de arquivos correspondentes, exceto que as partes que não correspondem a nenhum nome de arquivo não são modificadas.

FOOBAR_LIST="foobar_??????.log"
ls -lt $FOOBAR_LIST
    
por 01.11.2017 / 21:40