2016-10-05 5 views
1

Я хочу перебрать все файлы в каталоге в сценарии bash.bash script - Итерировать список файлов без расширения в каталоге

  1. список всех файлов с расширениями .txt .LOG .MAP .TL9 *
  2. список всех файлов, которые не имеют расширение,.

Я пытаюсь это:

for file in *.{LOG,txt,MAP,TL9*}; do

Я хочу, чтобы список файлов, который заканчивается только над расширением. Итак, я не хочу перечислять файл: temp.txt.EXT, потому что он не заканчивается вышеуказанными расширениями. Точно так же я не хочу, чтобы об этом сообщалось temp.TL94.JPG или temp.TL9.JPG.

Но в этом выше для цикла, как мне вставить проверку, которая дает мне файл без расширения?

Пожалуйста, помогите.

ответ

1

Использование extglob, вы можете сделать это:

shopt -s nullglob 
shopt -s extglob 

for file in @(!(*.*)|*[email protected](csv|LOG|TL9!(*.*))); do 
    echo "$file" 
done 
+0

Да ... но я использую это * @ (LOG | TXT | Карта | TL9) (*. *) –

+0

Это точно такое же выражение Глоб, как мой (который я отправил ранее), но сломана! вниз на 2 отдельных шара. – anubhava

+0

ОК. Большое спасибо @anubhava –

1

С extglob:

*[email protected](LOG|txt|MAP|TL9) !(*.*) 
  • *[email protected](LOG|txt|MAP|TL9) матчи все .LOG, txt, .MAP и .TL9 файлы

  • !(*.*) матчи все файлы, кроме тех, имеющих . имени

Включить extglob первый, если не включен:

shopt -s extglob 
+0

«@» не работал внутри скрипта. Мне пришлось использовать «+». –

+0

Показывает мне файлы типа Name.LOG.TMP (потому что я думаю, что у него есть .LOG посередине). Но я не делаю этого файла. Я хочу, чтобы все файлы «заканчивались» только с помощью LOG | txt | MAP | TL9 * –

+0

@PuneetJain Работала отлично. Вы на 'bash'? – heemayl

0

Можно также использовать команду find список файлов с расширением MAP, LOG, TL9 или без какого-либо расширения вообще. .

#!/bin/bash 

files=`find . -type f -regex ".*[\.LOG|\.MAP|\.TL9]" -o ! -name "*.*"` 

for file in $files 
do 
    echo $file 
done 
Смежные вопросы