Показать сообщение отдельно

  #2  
Старый 09.05.2010, 19:57
COMEJIbE
Новичок
Регистрация: 06.04.2010
Сообщений: 26
Провел на форуме:
179669

Репутация: 8
По умолчанию

если "ключ" совпадает с ключем команды test - то я бы сделал так:

Код:
for file in "$1"/*
do
     test -$2 "$file" && echo `basename "$file"`
done
никаких `ls ...`, for разворачивает звездочку в список файлов. из минусов будет то, в каталоге с большим кол-вом файлов можно получить переполнение длины параметров, но зато легче. в кавычки пришлось взять чтобы корректно обрабатывать пробелы в дургие символы в имени директории.
test делает свое дело, и если код возврата был нулевой, тогда выводится строка с echo, если надо имя файла с относительным путем - тогда можно без basename, но тогда всякие ../path/to/back/../../../ будут в имени файла, забыл команду которая преобразует в нормальный путь и имя файла.


Код:
## каталоги
[me@localhost] Videos $ ./lab.sh Planeta\ 51/ d
AUDIO_TS
VIDEO_TS

## файлы
[me@localhost] Videos $ ./lab.sh Planeta\ 51/VIDEO_TS f
VIDEO_TS.BUP
VIDEO_TS.IFO
VIDEO_TS.VOB
VTS_01_0.BUP
VTS_01_0.IFO
VTS_01_0.VOB
VTS_01_1.VOB
VTS_01_2.VOB
VTS_01_3.VOB
VTS_01_4.VOB
VTS_01_5.VOB

## сделаю маленькое западло, уберу право чтения с VOB-файлов. 
[me@localhost] Videos $ chmod -r Planeta\ 51/VIDEO_TS/*.VOB

[me@localhost] Videos $ ./lab.sh Planeta\ 51/VIDEO_TS/ r
VIDEO_TS.BUP
VIDEO_TS.IFO
VTS_01_0.BUP
VTS_01_0.IFO