-6

Я новый пользователь Unix, который пытается сделать простой скрипт на bash, который разархивирует несколько файлов в папке, которую я перечислю. Я не могу понять, почему он продолжает падать. Я вставляю скрипт ниже. Я надеюсь позже переместить старые заархивированные файлы .tar.7z в другой каталог (поэтому я создал новый каталог в скрипте ниже), но я просто пытаюсь заставить основную часть работать сначала.

#!~/bash
# My program to try to unzip several files with ending of tar.7z
# I have inserted the ability to enter the directory where you want this to be done 

echo "What file location is required for unzipping?"

read dirloc

cd $dirloc
mkdir oldzippedfiles
for directory in $dirloc
        do
                if
                [ $directory=*.tar.7z ]
                then
                cat $directory | 7za x -an -txz -si -so | tar -xf -
        fi
        done

echo "unzipping of file is complete"

exit 0

1 ответ1

2

В вашем скрипте много ошибок:

  1. #!~/bash не будет работать, так как это bash, который расширяется ~ до вашего домашнего каталога. Вы должны указать полный путь к bash (обычно /bin/bash).

  2. for directory in $dirloc не будет работать по двум причинам:

    • Чтобы просмотреть файлы внутри $dirloc , вам понадобится $dirloc/* .

    • Вы уже изменили каталоги, так что это должно быть просто * .

    Кроме того, поскольку вы просматриваете файлы, я предлагаю переименовать вашу переменную.

  3. test ([) не поддерживает глобальное сопоставление.

    Вместо этого используйте for file in *.tar.7z .

  4. Нет необходимости использовать кошку. Это усложняет ситуацию, так как 7zip не может угадать формат архива по расширению. -txz не будет работать, если вы на самом деле создали .xz файл FITH в .7z расширение (плохая практика).

    Вместо этого используйте 7za a -so $directory .

  5. Я не уверен, что должен делать ключ -an , но он выдает ошибки, и я почти уверен, что он не нужен.

Рабочая версия вашего скрипта должна выглядеть так:

#!/bin/bash

read dirloc

cd $dirloc

for file in *.tar.7z
        do
                7za x -so $file | tar -xf -
        done

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