[bash] Sprawdzanie wykonywalności plików

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
wodnik1990
Piegowaty Guziec
Piegowaty Guziec
Posty: 4
Rejestracja: 02 lut 2010, 19:27
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86

[bash] Sprawdzanie wykonywalności plików

Post autor: wodnik1990 »

Muszę wykonać program, który m.in. sprawdzi czy pliki są wykonywalne w bieżącym katalogu i jeśli tak to skopiuje ich nazwy do pliku pliki.info w innym katalogu.
Zacząłem robić, tu jest urywek programu:

if [ -x *.* ]; then
ls *.* > ~/LABOR/pliki.info
fi

ale nie wiem wywala błąd. Jak to powinno poprawnie być?
sybar
Sędziwy Jeż
Sędziwy Jeż
Posty: 66
Rejestracja: 15 mar 2008, 22:50
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: [bash] Sprawdzanie wykonywalności plików

Post autor: sybar »

Witam,

W systemie Linux jest całe mnóstwo pożytecznych poleceń. Całe twój skrypt można skrócić do pojedynczej linii korzystając z polecenia:

Kod: Zaznacz cały

find

Poczytaj podręcznik mam do polecenia. Jak nie dasz rady to pisz pomogę.

PS. Find - wyszukiwanie plików możesz skorzystać również z tego.

No dobra zostałem wyprzedzony, więc nie będę nabijał postów. :D
wodnik1990
Piegowaty Guziec
Piegowaty Guziec
Posty: 4
Rejestracja: 02 lut 2010, 19:27
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: [bash] Sprawdzanie wykonywalności plików

Post autor: wodnik1990 »

Dzięki, na pewno poczytam. Ale jednak chciałbym wykonać to za pomocą tego IF. Mógłbyś mi napisać jak powinno to wyglądać?
verdorben
Wytworny Kaczor
Wytworny Kaczor
Posty: 470
Rejestracja: 30 mar 2009, 18:00
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: MATE
Architektura: ARM

Odp: [bash] Sprawdzanie wykonywalności plików

Post autor: verdorben »

Kod: Zaznacz cały

for i in * ;do
[ -x $i ] && echo $i >>pliki.info
done
Problem w tym że jeśli w bieżącym katalogu będzie inny katalog, to jego nazwa też zostanie dodana ponieważ katalog z reguły ma chmod 755 ( if -x coś )

Ja z reguły używam if -x do konkretnej nazwy plika w celu sprawdzenia czy jest wykonywalny.
perl -e 'print $i=pack(c5,(41*2),sqrt(7056),(unpack(c,H)-2),oct(115),10);'
Inny OS: PLD Linux
clansman5
Sędziwy Jeż
Sędziwy Jeż
Posty: 77
Rejestracja: 06 sty 2009, 10:59
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: [bash] Sprawdzanie wykonywalności plików

Post autor: clansman5 »

zainteresuj sie parametrami:

-type,
-perm

Przykladowo

Kod: Zaznacz cały

for a in `find . -type f`
do
if [ -x $a ]; then
echo $a >> pliki.info
fi
done
nwkj
Sędziwy Jeż
Sędziwy Jeż
Posty: 33
Rejestracja: 08 sie 2009, 14:53
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: KDE Plasma

Odp: [bash] Sprawdzanie wykonywalności plików

Post autor: nwkj »

Kod: Zaznacz cały

find . -executable -type f -exec echo {} >> file.list \;
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [bash] Sprawdzanie wykonywalności plików

Post autor: beluosus »

@nwkj: po pierwsze, wypada przeczytać temat zanim się odpowie:
wodnik1990 pisze:Ale jednak chciałbym wykonać to za pomocą tego IF.
Po drugie:
nwkj pisze:

Kod: Zaznacz cały

find . -executable -type f -exec echo {} >> file.list \;
Powyższe rozwiązanie jest co najmniej nieefektywne, wystarczy:

Kod: Zaznacz cały

find . -executable -type f -print -maxdepth 1 > file.list
PS
@down: ha, widzę, że doczytałeś. Już nie brakuje. ;P
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
nwkj
Sędziwy Jeż
Sędziwy Jeż
Posty: 33
Rejestracja: 08 sie 2009, 14:53
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: KDE Plasma

Odp: [bash] Sprawdzanie wykonywalności plików

Post autor: nwkj »

... i brakuje -maxdepth :]
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 10 gości