2011-05-07 5 views
1

Как распечатать имя каждого файла в определенном каталоге с определенным расширением?Печать имени каждого файла с определенным расширением

Вот что я до сих пор:

#!/bin/sh 

DIR="~/Desktop" 
SUFFIX="in" 

for file in $DIR/*.$SUFFIX 
do 
    if [ -f $file ]; then 
    echo $file 
    fi 
done 

К сожалению, это не работает.

Что в этом плохого?

+0

Проверка того, существует ли файл после его перечисления, кажется бессмысленным. –

ответ

1

Вы можете использовать поиск с -type f

#!/bin/sh 
DIR="~/Desktop" 
SUFFIX="in" 
find "$DIR" -maxdepth 1 -type f -name "*.${SUFFIX}" -exec somecommand {} \; 
+0

Предпросмотр - это подготовка/испытание. Позже файл должен быть передан в файл jar в качестве аргумента – flip

-1
for file in `ls $DIR/*.$SUFFIX` 

обратите внимание на ls и обратных кавычках

+0

В нем говорится: ls: невозможно получить доступ к ~/Desktop/*. In: Нет такого файла или каталога – flip

+0

Это не расширение '~' - использование фактического полного пути или не помещайте '~/Desktop' в кавычки. –

+0

[Не разбирайте вывод ls.] (Http://mywiki.wooledge.org/ParsingLs). Ваш совет - это точно назад. Ваш код эквивалентен 'для файла в $ DIR" /*."$ SUFFIX "', за исключением того, что ваш код разбивается на все типы символов в именах файлов, и правильный путь всегда работает. – Gilles

6

В вашем DIR = "~/Desktop" "~" не развернутые, так как он находится в " ». удалите "". DIR = ~/Рабочий стол

+1

И, кроме того, do ** использовать двойные кавычки вокруг переменных подстановок **: 'для файла в $ DIR" /*."$ SUFFIX "'. – Gilles

0

Для информации: «файл» в системах Unix обычно является именем команды.

Его цель - проанализировать файлы, указанные в качестве аргумента, и вывести формат. Пример:

$ file entries.jar 
entries.jar: Zip archive data, at least v2.0 to extract 
Смежные вопросы