распакуйте скрипт unix [закрито]


-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

4
Що ви маєте на увазі під аварією? У вас неправильна лінія шебанг - це друкарська помилка? Яку помилку ви отримуєте? Ви перебуваєте на Unix чи Linux? Якщо Linux, то який Linux? Для чого ви використовуєте cat? Чи можете ви навести приклад каталогу, на якому потрібно запустити цей скрипт?
тердон

Вибачте, я на машині Linux. Коли я згадав, що воно врізається, вікно терміналу закрилося. Я використовував команду cat, щоб прочитати вміст файлу. Отже, це приводить мене до очевидного, що я робив неправильно, і те, що каталог (вище) слід замінити на ім'я файлу - вибачте, що це так незрозуміло, але я змусив запустити сценарій. Дякую
користувач1004856

3
Як ти змусив його працювати?
slhck

Відповіді:


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файл із .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

1
Це ледве розбірливо як коментар. Ви можете опублікувати свій виправлений підхід як відповідь, якщо він працює.
Денніс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.