解決方案:提取subtring,在模式分裂,在bash腳本使用sed的
#!/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/ - //'
這使我只是 「富」。我想有更好的辦法...不要打我很難,我是新來的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」 - 匹配「foo - bar.ext」的模式的一部分。
基本上,模式「foo - bar.ext」後面的文件列表應移動到名爲「foo」的目錄中。
例如: foo1 - bar1.ext foo1 - bar2.ext foo1 - bar2.ext - >將被移動到子目錄 「foo1」
anotherfoo - anotherbar.ext - >將被移動到subdir「anotherfoo」
鑑於您的「foo - bar.ext」輸入,請編輯您的Q以包含$ d和$ f的預期最終值。祝你好運。 – shellter
完成,希望現在更清楚:-) –
+1爲好初學者S.O.題。只要記住包括示例輸入,一些必需的輸出,您嘗試過的代碼以及您得到的錯誤消息,並且您將在此處獲得非常快速的幫助。閱讀http://stackoverflow.com/faq以真正加快速度。祝你好運。 – shellter