for i in First10/*; do
binaries/jackhmmer --tblout test$(basename $i).txt -E1 --noali $i largedatabase.fasta
done
Я не уверен в команде, которую вы выполняете в цикле. Но я думаю, что мой ответ может удовлетворить ваше требование.
Он будет создавать новый выходной файл в каждом цикле.
**то есть: если у вас есть два файла с именами database1.db
и database2.db
в каталоге First10
, в первом цикле будет создан вывод testdatabase1.db.txt
и testdatabase2.db.txt
во втором цикле.
Вам нужна оболочка, чтобы интерпретировать эти конструкции if / then / else
или запускать эти конвейеры (хотя на самом деле они вам не нужны здесь):
find . -type f -exec sh -c '
for file do
case $(file -b "$file") in
(data) printf "%s is CORRUPT\n" "$file";;
(*) printf "%s is DATA\n" "$file";;
esac
done' sh {} +
(как и в вашем вопросе, он печатает "CORRUPT", когда файл
говорит data
. Я не уверен, что вы это имели в виду).
Что бы вы ни делали, не включайте {}
в код оболочки, как предлагали другие! Это было бы очень опасно (и, кстати, непереносимо), поскольку, например, файл с именем $ (rm -rf "$ HOME")
заставит вас удалить весь домашний каталог.
Это не точный ответ на ваш заголовок (вложение if внутри find), но для всех целей это лучшее решение, чем вставка целого сценария оболочки внутри find.
Также обратите внимание, что внутри общего sh
тесты [[
не работают, а [
не соответствуют шаблону в правой части =
. Или используйте regex ==~, как я полагаю, вам нужно. Таким образом, вам понадобится оболочка bash, что не имеет особого смысла, если вы уже находитесь внутри оболочки bash. В любом случае, это быстрее, чем запускать новую оболочку:
#!/bin/bash
while IFS= read -rd '' file; do
if [[ $(file "$file" | cut -f2 -d':') =~ " data" ]]; then
printf "%s is CORRUPT\n" "$file"
else
printf "%s is DATA\n" "$file"
fi
done < <(find . -type f -print0)
Оговорка: я изменил ваш == на =~, предполагая, что вы хотите найти ' data'
текст в PNG-изображении (или что-то подобное):
$ file TrueTable-1.png| cut -f2 -d':'
PNG image data, 405 x 292, 8-bit colormap, non-interlaced
Пожалуйста, сделайте комментарий, если это предположение неверно.