Трябва да изпълните команда в текущата директория само ако файлът не е зададен с изпълним файл

Ето го проблема:

Използвайте bash for цикъл, който преминава през файлове, които имат низа "osl-guest" и ".tar.gz" в текущата ви директория (използвайки командата 'l', вижте примерния изход по-долу), и изпълнява командата 'tar - zxf' за всеки файл поотделно САМО АКО файлът не е зададен с изпълним файл. Например, за да изпълните командата „tar -zxf“ на файла „file1“, командата ще бъде: tar -zxf file1

Примерен изход на "l -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