无法创建目录,因为目录存在?
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
我正在尝试将 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