目录名称 - 剥离空格和其他格式

时间:2014-10-14 06:13:21

标签: linux bash unix ubuntu sed

我是bash和学习sedawk的强大工具的新手,还有更多这个平台提供的功能。在我的linux框中,我有一个包含子目录的音乐目录。这些子目录在名称中有大写。我试图使该音乐目录中的所有文件夹小写并删除间距。除了在子目录名称中删除空格之外不更改最后一个连字符之后的任何内容。文件可能有许多连字符。我只是考虑到最后一个。我怎么能这样做?

while read -r file; do
    new_file=$(echo "$file" | sed -re 's/^([^-]*)-\s*([^\.]*)/\L\1\E-\2/' -e 's/ /_/g' -e 's/_-/-/g')
        if [ "$file" != "$new_file" ]; then
                mv "$file" "$new_file"
        fi
done

例如:

输入

New- Survivor - Eye Of The Tiger – 12wOlL

所需结果:

new-survivor_-_ eye_of_the_tiger-12wOlL

当前结果:

new-Survivor_-_ Eye_of_The_Tiger-12wOlL

2 个答案:

答案 0 :(得分:1)

更改您的sed命令,如下所示,

$ echo 'New- Survivor - Eye Of The Tiger – 12wOlL' | sed -re 's/^([^-]*-)\s*([^–]*)\s*–/\L\1\L\2–/;s/ /_/g;s/_-_/_-_ /g;s/_–_/-/g'
new-survivor_-_ eye_of_the_tiger-12wOlL

答案 1 :(得分:1)

您可以使用此sed命令:

s='New- Survivor - Eye Of The Tiger - 12wOlL'
echo "$s" | sed 's/^\(.*\)\(-[^-]*\)$/\L\1\E\2/; s/ *- */-/; s/^\(.*\) \+- *\([^-]*\)$/\1-\2/; s/ /_/g'
new-survivor_-_eye_of_the_tiger-12wOlL