解决方案:
#!/bin/bash
for f in *.mp3; do
d="${f% - *}"
if [ -d $d ]; then
mv "$f" "$d/";
else
mkdir "$d" && mv "$f" "$d/";
fi
done
我正在尝试这个:
$ echo "foo - bar.ext" | sed 's/\('" - "'\).*/\1/' | sed 's/ - //'
这给了我“foo”。我想有更好的方法...不要打我,我是 sed 的新手。但是现在,如何将它包含在这样的循环中:
#!/bin/bash
for f in *.ext; do
d="${f%.*}"
#Extract Filename String before the " - " and write back to $d
mkdir "$d" && mv "$f" "$d/";
done
提前致谢
更多信息:
$f 应保持不变,而存储在 $d 中的目录名称应仅包含与“foo - bar.ext”匹配的模式的“foo”部分。
基本上,应将遵循模式“foo - bar.ext”的文件列表移动到名为“foo”的目录中。
例如: foo1 - bar1.ext foo1 - bar2.ext foo1 - bar2.ext --> 将被移动到子目录 "foo1"
anotherfoo - anotherbar.ext --> 将被移动到子目录“anotherfoo”