Имя файла, распакованного после использования tar - PullRequest
0 голосов
/ 06 декабря 2018

Принципиально новый для bash, и я хочу распаковать файл и вскоре после этого получить все файлы внутри этого нового распакованного файла, чтобы просмотреть их.

Поскольку я новичок в bash, янемного борется, и самый быстрый способ, который я нашел, это жестко закодировать имя сжатого файла.

Поскольку я не хочу жестко задавать больше переменных, мне было интересно, могу ли я сохранить переменную распакованного файла (то же самое без .tar.gz) после запуска команды для распаковки.

COMP_FILE=$(ls data_compressed*)
tar zxf ${COMP_FILE}
FILE_LIST=$(ls $COMP_FILE)
echo $FILE_LIST

Довольно плохо знаком с BASH, поэтому не стесняйтесь исправлять или указывать на любые направления, где я могу узнать больше.

Спасибо.

1 Ответ

0 голосов
/ 06 декабря 2018

Оператор % может быть использован для удаления суффикса, см. man bash: "${COMP_FILE%.tar.gz}"

Все это ниже может сломаться, когда (пробел) или другие специальные символы вимена файлов в архиве.

Попробуйте:

COMP_FILE=$(ls data_compressed*)
tar zxf "${COMP_FILE}"
FILE_LIST=$(ls "${COMP_FILE%.tar.gz}")
cd "${COMP_FILE%.tar.gz}"
for filename in ${FILE_LIST} ; do
  printf "Filename is %s\n" "${filename}"
done

Благодаря v вы можете представить цикл по именам файлов, пока tar извлекает данные:

for filename in $(tar xzvf data_compressed*) ; do
  printf "Filename is %s\n" "${filename}"
done
...