2014-12-17 8 views
-3

У меня есть несколько файлов. Шаблон выглядит следующим образом:BASH - любая замена символов в имени файла

FILE_1.TXT 
FILE_2.TXT 
FILE_3.TXT 

Теперь у меня есть петля, где я хочу что-то сделать с этими файлами. По какой-то причине (причина не имеет значения для вопроса), я должен запустить цикл не через *.TXT, а через FILE_*.TXT - только одна вещь, которая меняется в именах файлов, - это номер. FILE_*.TXT не работает, Bash ищет FILE_*.TXT не FILE_1.TXT и т.д.

код я использую выглядит следующим образом:

for file in FILE_*.TXT 
    do 
# doing some stuff with the files 
    done 

Как я могу получить эту работу?

+2

может быть, если вы разделяете ваш код до сих пор кто-то сможет сказать вам, что вы делаете неправильно –

+0

@MattCoubrough - Я обновил этот вопрос – dziki

ответ

1

Как уже говорилось, у вас нет файлов, соответствующих картинке.
Вы можете установить опцию оболочки под названием nullglob

$ for x in *.doesnotexist; do echo $x; done 
*.doesnotexist 

$ shopt -s nullglob 

$ for x in *.doesnotexist; do echo $x; done 
$ (Nothing is printed, the loop does not run.) 
4

Единственный способ вы получите FILE_*.TXT из этого цикла, если ни один из этих файлов на самом деле не существует:

$ for file in FILE_*.TXT;do echo $file; done 
FILE_*.TXT 

$ touch FILE_7.TXT 

$ for file in FILE_*.TXT;do echo $file; done 
FILE_7.TXT 

Поэтому я предлагаю вам очень внимательно посмотреть на моделях и обеспечить эти файлы сделать есть.

+0

кажется, что Я допустил ошибку - файлы были найдены другими командами в цикле. Единственная команда, которая не смогла увидеть имя файла REAL, вместо этого говорила, что 'FILE _ *. TXT' не существует - было ...' head' - 'head:« FILE _ *. TXT »не открывается для чтения: Файл или каталог не найдены' – dziki

0

Все работает отлично:

$ ls 
FILE_1.TXT FILE_2.TXT FILE_3.TXT 
$ for f in FILE_*.TXT 
do 
    echo $f 
done 
FILE_1.TXT 
FILE_2.TXT 
FILE_3.TXT 

Подсказка:file является exitsting инструмента:

$ file 
Usage: file [-bchikLlNnprsvz0] [--apple] [--mime-encoding] [--mime-type] 
      [-e testname] [-F separator] [-f namefile] [-m magicfiles] file ... 
     file -C [-m magicfiles] 
     file [--help] 

Используйте другое имя переменного, например f.

+0

Я довольно уверен, что 'bash' может отличить исполняемый файл от имени переменной :-) – paxdiablo

+1

Уверен, что это возможно. Но, чтобы избежать конфузина, я рекомендую не теневать имена. –

Смежные вопросы