2013-03-21 3 views
1

У меня есть файлы с букетом * .tgz, и когда я развожу их, как имя каталога отличается от имени файла tgz. Пример: У меня есть файл ab.tgz, и он получает изменение на что-то вроде 2012_test_ab. У меня такое чувство, потому что во время сжатия файл должен был переименовать этот файл сжатия в родительский каталог и т. Д.Переименовать каталог после untar tgz-файла

Но что я хочу для этого нужно переименовать каталог в исходное имя файла.

У меня есть следующий сценарий одной строки для запуска на терминале, но как я могу переименовать?

for i in *.tgz; do tar xvf $i -C ../stats/; done 

Как это изменить, чтобы переименовать каталог, который распаковывает.

Пример: Когда я распаковка ab.tgz он получает извлечен имя каталога 2013_03_12_18_26_ab и файлы внутри этой директории, но то, что я хочу сделать, это сохранить имя каталога как абы вместо 2013_03_12_18_26_ab

Я хочу ab.tgz, чтобы получить выписку до ../stats/ab

ответ

1

Что-то вроде этого может работать. Раньше, поэтому, мой синтаксис может быть немного выключен.

for i in *.tgz 
do 
NEWDIR=`tar -tf $i | head -1 | cut -d/ -f2 | cut -d_ -f6` 
mkdir ../stats/$NEWDIR 
tar xvf $i -C ../stats/$NEWDIR/ 
done 

или

for i in *.tgz; do NEWDIR=`tar -tf $i | head -1 | cut -d/ -f2 | cut -d_ -f6`; mkdir ../stats/$NEWDIR; tar xvf $i -C ../stats/$NEWDIR/; done 
+0

'инт в * .tgz; do NEWDIR = 'tar -tf $ i | head -1 | cut -d/-f1' mkdir $ NEWDIR tar xvf $ i -C ../stats/$NEWDIR; done' попробовал это сделать так, чтобы получить ошибку. Команда NEWDIR не найдена –

+0

hmm все еще дает мне такую ​​же ошибку '#for i in * .tgz; do NEWDIR = '' tar -tf $ i | head -1 | cut -d/-f2'' mkdir $ NEWDIR tar xvf $ i -C ../stats/$NEWDIR; done' –

+0

Ошибка говорит bash: NEWDIR: команда не найдена. Я немного смущен. –

1

Если предположить, что все, что вы очернить архивы конец с .tgz расширением и там может быть несколько точек в исходном имени файла, как насчет:

for i in *.tgz; do tname=$(echo $i | sed -e 's/.tgz//') ; tar xvf $i -C ../stats/$tname; done 
Смежные вопросы