【发布时间】:2012-09-17 06:50:15
【问题描述】:
解决方案:
#!/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”
【问题讨论】:
-
请根据您的“foo - bar.ext”输入,编辑您的 Q 以包含 $d 和 $f 的预期最终值。祝你好运。
-
完成,希望现在更清楚:-)
-
+1 适合初学者 S.O.题。请记住包括示例输入、一些必需的输出、您尝试过的代码以及您收到的错误消息,您将在此处获得非常快速的帮助。阅读stackoverflow.com/faq 以真正了解最新情况。祝你好运。