2010-07-11 3 views
2

мне нужно преобразовать около 12000 TIF файлов во многих каталогах, и попытаться написать Баш-скрипт:еще один удар (теперь .bat) скрипт

#!/bin/bash 
find -name "*.tif" | while read f 
do 
convert "$f" "${f%.*}.png" 
rm -f "$f" 
done 

Почему говорят: x.sh: 6: Синтаксис ошибка: конец файла неожиданным (ожидающий «сделать») и что мне делать?


Большое спасибо всем вам, мужчины, но я был обманут: компьютер, на котором это должно быть выбежать работы под Windows. Я не знаю, как работать со строками и циклов в DOS, теперь мой сценарий выглядит следующим образом:

FOR /R %i IN (*.tif) DO @ (set x=%i:tif%png) & (gm convert %i %xtif) & (erase /q /f %i) 

% я - один из .tif файлов.

% х - имя файла с расширением .png

г новообращенного - графика Магического утилиты работают аналогично с Преобразовать образ Магического на Linux.

+1

попробовать dos2unix на вашем сценарии. – ghostdog74

+4

Я бы предложил 'конвертировать '$ f" "$ {f%. *}. Png" && rm -f "$ f" '. В противном случае, если преобразование завершится неудачно, вы потеряли шанс на повторную попытку :) – Stephen

+0

И? http://gnuwin32.sourceforge.net/ –

ответ

3

Синтаксис выглядит хорошо, но если это проблема с EOL в, попробуйте добавить точку с запятой перед do, чтобы исправить ошибку синтаксиса (или проверьте новые строки фактически присутствуют/закодирован как ghostdog74 предполагает):

find -name "*.tif" | while read f ; do # ... 

Обратите внимание, что шаблон поиска/чтения не является надежным. Использование можно использовать exec возможностей найти непосредственно (спасибо Philipp для команды инлайн):

find -name "*.tif" -exec sh -c 'file=$0 && convert "$file" "${file%.tif}.png"' '{}' ';' -delete 
+2

Вы также можете указать простые скрипты inline: 'find -name '* .tif' -exec sh -c 'file = $ 0 && convert" $ file "" $ {file% .tif } .png "'-delete' – Philipp

+1

@Philipp: nice inline invocation;) @pilcrow: Я согласен, вам нужна либо новая строка *, либо * точка с запятой (не для обоих), но ее стоит попробовать, поскольку отсутствующая строка новой строки (например, забытый при вводе строки или из-за проблемы с кодировкой), по-видимому, является наиболее вероятной причиной этой синтаксической ошибки для меня. – p00ya

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