我正在尝试将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
答案 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;
}