因为目录存在而无法建立目录?

时间:2019-10-14 22:54:45

标签: bash git-bash

我正在尝试将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 :(得分:0)

即使给出错误,Bash仍应继续运行,除非您已使用set -e,否则可以在脚本中添加set +e来扭转这种现象,并在命令失败后继续运行。来自help set

  

-e如果命令以非零状态退出,则立即退出。

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

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

答案 1 :(得分:0)

您是否尝试过此方法。...我的情况很好...

private static Image createSVGImage(PdfWriter pdfWriter, String imageEntry) throws BadElementException, IOException {
        Image image = null;
        final BufferedImage[] imagePointer = new BufferedImage[1];

        PdfContentByte pdfCB = new PdfContentByte(pdfWriter);   

         try {

                TranscoderInput input = new TranscoderInput(new FileInputStream(imageEntry));

                ImageTranscoder t = new ImageTranscoder() {

                    @Override
                    public BufferedImage createImage(int w, int h) {
                        return new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
                    }

                    @Override
                    public void writeImage(BufferedImage img, TranscoderOutput output) throws TranscoderException {
                        // TODO Auto-generated method stub
                         imagePointer[0] = img;

                    }
                };
                t.addTranscodingHint(ImageTranscoder.KEY_FORCE_TRANSPARENT_WHITE,
                        Boolean.FALSE);
                t.addTranscodingHint(ImageTranscoder.KEY_BACKGROUND_COLOR, Color.white);
                t.transcode(input, null);
            }
            catch (TranscoderException ex) {
                // Requires Java 6
                ex.printStackTrace();
                throw new IOException("Couldn't convert ");
            }

          image = Image.getInstance(pdfCB, imagePointer[0], 1);     

        return image;
    }