2

解决方案:

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

4

1 回答 1

1

你几乎已经有了。您的代码片段中仅缺少三个字符。

#!/bin/bash
for f in *.ext; do
    d="${f% - *}"
    mkdir "$d" && mv "$f" "$d/";
done
于 2012-09-25T17:58:34.367 回答