Не можете создать каталог, потому что каталог существует? - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь извлечь список mp3-файлов на 2 части: 1 для исполнителя и 1 для названия песни. Пока у меня есть это:

#!/bin/bash
for f in *.mp3; do
        artist="${f%  -*}"
        song="${f#*-\ }"
        mkdir "$artist"
        mv "$f" "$song"
        mv "$song" "$artist";
done

Я тестирую созданный мной файл с именем "hi - 1.mp3" (hi/ -/ 1.mp3), но получаю ошибку mkdir: cannot create directory ‘hi - 1.mp3’: File exists, которая не позволяет изменить название песни. и переместить его в каталог. Я думал, что это проблема с каталогом, поэтому я попытался вручную проверить, существует ли каталог:

#!/bin/bash
for f in *.mp3; do
        artist="${f%  -*}"
        song="${f#*-\ }"
        if [ -d "$artist" ]; then
                exit 0
                mkdir $"$artist"
fi
        mv "$f" "$song"
        mv "$song" "$artist";
done

Но поскольку ошибка в том, что каталог существует, он ничего не делает и просто приводит к exit 0(хотя у меня больше нет ошибки mkdir.) Я также попытался ls -a во всех моих каталогах, но я не могу найти другой каталог с именем hi - 1.mp3

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

ты пробовал это ... это прекрасно работает ... для моего случая.

#!/usr/local/bin/bash
 for f in *.mp3
 do
 artist=`echo ${f%-*}`
 song=`echo ${f#*-}`
 mkdir -p $artist
 mv "$f" "$song"
 mv $song ./$artist
 done
0 голосов
/ 15 октября 2019

Bash должен продолжаться даже после выдачи ошибки, если вы не использовали set -e, вы можете добавить set +e в ваш скрипт, чтобы изменить это поведение и продолжить работу после сбоя команды. From help set:

-e Выйти немедленно, если команда завершается с ненулевым статусом.

Кроме того, вы можете использовать mkdir -p, который будет подавлятьОшибка. От man mkdir:

   -p, --parents
          no error if existing, make parent directories as needed
...