2015-11-17 2 views
2

Вот мой сценарийкоманда не найти в сценарии оболочки

#!/bin/bash 

for file in *.ats; do 
    if [["$file" =~ _R079_]]; then 
rm -f $file 
    fi 
done 

Она должна быть простой, удалить все файлы, которые содержат R079

del.sh: line 4: [[263_V01_C00_R000_TEx_BL_4096H.ats: command not found 
del.sh: line 4: [[263_V01_C00_R079_TEx_BL_4096H.ats: command not found 
del.sh: line 4: [[263_V01_C01_R000_TEy_BL_4096H.ats: command not found 
del.sh: line 4: [[263_V01_C01_R079_TEy_BL_4096H.ats: command not found 
del.sh: line 4: [[263_V01_C02_R000_THx_BL_4096H.ats: command not found 
del.sh: line 4: [[263_V01_C02_R079_THx_BL_4096H.ats: command not found 
del.sh: line 4: [[263_V01_C02_R081_THx_BL_4096H.ats: command not found 
del.sh: line 4: [[263_V01_C03_R000_THy_BL_4096H.ats: command not found 
del.sh: line 4: [[263_V01_C03_R079_THy_BL_4096H.ats: command not found 

Где проблема?

+2

Добавить пробел после '[[' и еще раз перед закрытием ']]' ' – arco444

+2

[[$ файла = ~ _R079_]]' или '[[$ файл == * _R079_ *]] '(пробелы не требуются) – anubhava

+1

@anubhava 44 Да, сейчас работает! –

ответ

4

Проблема заключается в том, что там нет пробелов после [[ и до ]], так что вы можете использовать:

[[ $file =~ _R079_ ]] 

Или с помощью Глоб:

[[ $file == *_R079_* ]] 

Однако, если вы просто удалить файлы, необходимые не использовать петлю и использовать:

rm *_R079_*.ats 

Обратите внимание, что выше rm команда может дать ошибку, если имеется огромное количество совпадающих файлов. В этом случае использование find:

find . -maxdepth 1 -name '*_R079_*.ats' -delete 
Смежные вопросы