1

Я новичок в bash, и я создаю сценарий, который просматривает файлы в каталоге и на основе части имени файла, что-то делает с файлом, пока у меня есть это:

#!/bin/bash
DIR="/Users/me/Documents/import/*"
for f in "$DIR"
do
  t=??????
  echo "Loading $f into $t..."
done

поэтому $f выведет что-то вроде этого: /Users/me/Documents/import/time_dim-1272037430173 из этого я хочу, чтобы t равнялся time_dim , каталог может иметь переменную длину, а -1272037430173 - фиксированную длину (это метка времени unix кстати).

Каков наилучший способ сделать это?

3 ответа3

4

Непроверенные:

t=`basename $f | sed -e 's/-[0-9]\+$//'`
0
What is the best way to go about this? 

"лучший" способ, используя только внутреннюю часть bash, :)

$ s=/Users/me/Documents/import/time_dim-1272037430173
$  echo ${s%-*}
/Users/me/Documents/import/time_dim
$ t=${s%-*}
$ echo ${t##*/}
time_dim
0

Вы также можете сделать:

$ t=`basename $f|tr -d '[0-9-]'`
или же

$ t=`basename $f|gawk -F- '{print $1;}'`

отредактировано: я неправильно понял вопрос

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .