Использование команды «tar» в терминале для нескольких папок / файлов

1

У меня много таких файлов

SomeDirectory/RandomName.spa
SomeDirectory/AnotherRandomName.spa
SomeDirectory/YetAnotherRandomName.spa

...

Я хочу распаковать каждый .spaфайл в SomeDirectoryкаждую отдельную папку с тем же именем. Я бы использовал что-то вроде - tar -xvf, но с какими атрибутами?

После этого я хочу снова упаковать каждую папку SomeDirectoryобратно RandomName.spa(с сохранением названия папки). Команда была бы tar -cvf, но с какими атрибутами?

user169895
источник
Вы читали справочную страницу для tar? Если нет, то я бы предложил сделать это. В терминале введите, tarа затем нажмите его, удерживая клавишу Control, выбрав «Открыть страницу руководства». Тогда, если вы все еще в замешательстве, отредактируйте ваш вопрос и попробуйте описать более подробно.
user3439894
Я предполагаю, что *.spaфайлы на самом деле являются архивами tar? Что произойдет, если вы бежите tar -xvf RandomName.spa?
холме
@ user3439894 - хорошо, я посмотрю на это
user169895
@patrix - да, они есть. Это распаковало бы указанный архив в папку. Однако я хочу распаковать все архивы, а не делать вручную для каждого.
user169895

Ответы:

0

Предполагая, что (1) .spaфайлы на самом деле являются .tarархивами, (2) вы находитесь SomeDirectoryи (3) что каталоги с именами архивов, которые вы хотите извлечь, не существуют, следующий фрагмент кода должен достичь того, чего вы хотите:

for a in *.spa
  do a_dir=`expr $a : '\(.*\).spa'`
  mkdir $a_dir
  tar -xvf $a -C $a_dir;
done

Или, если вы предпочитаете однострочник:

for a in *.spa; do a_dir=`expr $a : '\(.*\).spa'`; mkdir $a_dir; tar -xvf $a -C $a_dir; done

Первая строка forцикла удаляет имя .spaиз архива и присваивает его переменной, которая используется во второй строке для создания каталога с этим именем, а в третьей строке - tarс -Cаргументом.

-CАргумент в tarтолько изменения каталога во время экстракции и на самом деле не сделать один, делая вещи аа немного более сложным , чем они должны быть.

Предоставлено: Этот ответ является небольшой модификацией https://superuser.com/a/748567/226246.

Густаво Безерра
источник