无法创建目录,因为目录存在?

Can't make directory because the directory exists?

我正在尝试将 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

的目录

Bash 应该在给出错误后继续,除非你使用了 set -e,你可以在你的脚本中添加一个 set +e 来扭转这种行为并在之后继续 运行命令失败。来自 help set:

-e Exit immediately if a command exits with a non-zero status.

此外,您可以使用 mkdir -p 来抑制错误。来自 man mkdir:

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

你试过了吗....它工作得很好...我的情况。

#!/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