Для l oop с операторами if не работает должным образом в bash - PullRequest
1 голос
/ 20 января 2020

Он печатает только оператор "else" для всего, но я точно знаю, что существуют файлы, которые он ищет. Я пытался адаптировать некоторые другие ответы, но я подумал, что это должно сработать.

Кто-нибудь знает, что не так с моим синтаксисом?

# Contents of script
for ID_SAMPLE in $(cut -f1 metadata.tsv | tail -n +2);
    do if [ -f ./output/${ID_SAMPLE} ]; then
        echo Skipping ${ID_SAMPLE};
    else
        echo Processing ${ID_SAMPLE};
    fi
done

Дополнительная информация

# Output directory
(base) -bash-4.1$ ls -lhS output/
total 170K
drwxr-xr-x 8 jespinoz tigr 185 Jan  3 16:16 ERR1701760
drwxr-xr-x 8 jespinoz tigr 185 Jan 17 18:03 ERR315863
drwxr-xr-x 8 jespinoz tigr 185 Jan 16 23:23 ERR599042
drwxr-xr-x 8 jespinoz tigr 185 Jan 17 00:10 ERR599072
drwxr-xr-x 8 jespinoz tigr 185 Jan 16 13:00 ERR599078

# Example of inputs
(base) -bash-4.1$ cut -f1 metadata.tsv | tail -n +2 | head -n 10
ERR1701760
ERR599078
ERR599079
ERR599070
ERR599071
ERR599072
ERR599073
ERR599074
ERR599075
ERR599076

# Output of script
(base) -bash-4.1$ bash test.sh | head -n 10
Processing ERR1701760
Processing ERR599078
Processing ERR599079
Processing ERR599070
Processing ERR599071
Processing ERR599072
Processing ERR599073
Processing ERR599074
Processing ERR599075
Processing ERR599076


# Checking a directory
(base) -bash-4.1$ ls -l ./output/ERR1701760
total 294
drwxr-xr-x  2 jespinoz tigr   386 Jan 15 21:00 checkpoints
drwxr-xr-x  2 jespinoz tigr     0 Jan 10 01:36 tmp

1 Ответ

6 голосов
/ 20 января 2020

-f для проверки, является ли имя файла, но все ваши имена являются каталогами. Для проверки используйте -d.

if [ -d "./output/$ID_SAMPLE" ]
then

Если вы хотите проверить, существует ли имя с любым типом, используйте -e.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...