Необходимо запустить команду в текущем каталоге, только если файл не установлен с исполняемым файлом

Вот проблема:

Используйте цикл bash for, который перебирает файлы со строкой «osl-guest» и «.tar.gz» в вашем текущем каталоге (используя команду «ls», см. пример вывода ниже) и запускает команду «tar - zxf' для каждого файла отдельно, ТОЛЬКО ЕСЛИ файл не установлен с исполняемым файлом. Например, чтобы запустить команду «tar -zxf» для файла «file1», команда будет выглядеть так: tar -zxf file1

Пример вывода "ls -l":

-rw-r--r--   1 lance lance   42866 Nov  1  2011 vmlinuz-2.6.35-gentoo-r9-osl-guest_i686.tar.gz
-rwxr-xr-x   1 lance lance   42866 Nov  1  2011 vmlinuz-3.4.5-gentoo-r3-osl-guest_i686.tar.gz
-rw-r--r--   1 lance lance   42866 Nov  1  2011 vmlinuz-3.5.3-gentoo-r2-osl-guest_i686.tar.gz

person tfahl    schedule 30.01.2013    source источник
comment
Добро пожаловать в Stack Overflow! Что вы пробовали?   -  person Corey Adler    schedule 30.01.2013
comment
Я просто новичок в пакетной обработке, и я пытался исследовать это некоторое время, но я не могу понять, как это сделать.   -  person tfahl    schedule 30.01.2013


Ответы (1)


Вы можете выполнить цикл следующим образом, без необходимости вызова ls:

# For each file matching the pattern
for f in *osl-guest*.tar.gz; do
    # If the file is not executable
    if [[ ! -x "$f" ]]; then 
            tar -zxf $f;
    fi; 
done;

*osl-guest*.tar.gz просто использует расширение оболочки, чтобы получить список файлов, которые вы хотите, вместо того, чтобы вызывать его ls.

Оператор if проверяет, является ли файл исполняемым, -x является тестом для исполняемого файла, а использование ! отрицает результат, поэтому он войдет в блок if только в том случае, если файл не является исполняемым.

person imp25    schedule 30.01.2013