Я пытаюсь присвоить последнее имя файла, полученное из ниже команды ls, но получаю некоторую ошибку, было бы очень хорошо, если кто-то может ответить, как может я фиксировать это!
fn=`ls -lrt pur_bom_interface_daily*.log | cut -c59-102 | tail -1`
или
fn=$(ls -lrt pur_bom_interface_daily*.log | cut -c59-102 | tail -1)
Ошибка добралась:
ls: 0653-341 The file pur_bom_interface_daily*.log does not exist
Примечание: pur_bom_interface_daily*.log
Я использую *
с тех пор существует несколько файлов, начинающих их имя с pur_bom_interface_daily
и связанный с датой, в которую они создали.
Ваша вторая строка сценария должна работать, если файлы pur_bom_interface_daily*.log не существуют в Вашем текущем рабочем каталоге. Для доказательства это пробует этот блок примера кода:
mkdir logfiles
cd logfiles
touch log-{1..4}.log
fn=$(ls -lrt log-*.log)
echo "$fn"
результаты последней команды должны перечислить 4 новых файла журнала, что Вы сделали использование touch
.
блок примера кода должен также работать при замене четвертой строкой с:
fn=$(ls -lrt log-*.log | cut -c1-59 | tail -4)
..., хотя Вам, возможно, придется измениться 59
на различное число для вывода каждой строки, чтобы быть значимой длины (59 длина каждой строки вывода в вышеупомянутой строке кода).
Используя обратные галочки присвоит все stdout к Вашей переменной с пробелами между каждым аргументом, пробелы в именах файлов завинчивают это. Чтобы добраться сначала или продлиться канал в голову или хвост, попробуйте:
fn=`ls -rt -1 * | tail -1`
Опция -1
на ls
является одним файлом на строку. Опция -1
на tail
является последней строкой только.