
Eu tenho um diretório que se parece com isso:
/path/to/files/data-file.1
/path/to/files/data-file.2
/path/to/files/data-file.3
/path/to/files/data-file.4
/path/to/files/data-file.5
/path/to/files/data-file.6
Gostaria de fazer um script para listar todos os arquivos entre dois valores em variáveis como as seguintes:
#!/bin/bash
fileA="/path/to/files/data-file.2"
fileB="/path/to/files/data-file.5"
ls -v /path/to/files/*-file.[0-9]* | sed -n '/$fileA/,/$fileB/p'
com a saída:
/path/to/files/data-file.2
/path/to/files/data-file.3
/path/to/files/data-file.4
/path/to/files/data-file.5
No entanto, o comando sed parece não funcionar. Estou supondo por causa das barras nas variáveis. Existe uma maneira de superar isso sem alterar as variáveis? Eu gostaria de usar esse trecho de código em um script onde fileA e fileB sejam dinâmicos.
Responder1
Você pode usar um delimitador diferente se escapar dele na primeira ocorrência, para que as barras não confundam sed
. No entanto, observe que o uso de aspas simples resultará na bash
não substituição de variáveis; portanto, no seu exemplo, sed
procura $fileA
e $fileB
literalmente, pois as variáveis não são expandidas. Você precisa usar aspas duplas se usar variáveis.
Então, algo assim deve funcionar:
#!/bin/bash
fileA="/path/to/files/data-file.2"
fileB="/path/to/files/data-file.5"
ls -v /path/to/files/*-file.[0-9]* | sed -n "\@$fileA@,\@$fileB@p'