如何从shell中的变量/目录中删除空格?

时间:2013-10-21 10:02:08

标签: bash shell variables unix whitespace

我有这段代码:

find . ! -path . -type d -maxdepth 3 -mindepth 3 -exec sh -c '
    dir="$0"
    tvnamer --batch $dir
    mv $dir/*.mkv $dir/..
    [ -f $dir/*.part ] || trash $dir
' {} ';'

然而,由于$dir中的目录名称中有空格(TVnamer感到困惑),它会中断。

./Show/Season/[ www.Torrenting.com ] - Castle.2009.S06E01.720p.HDTV.X264-DIMENSION
./Show/Season/[ www.Torrenting.com ] - Revenge.S03E01.720p.HDTV.x264-2HD

如何删除空格/重命名$dir中的文件夹,然后将其传递给其余代码?

2 个答案:

答案 0 :(得分:2)

引用$dir时使用双引号:

find . ! -path . -type d -maxdepth 3 -mindepth 3 -exec sh -c '
    dir="$0"
    tvnamer --batch "$dir"
    mv "$dir"/*.mkv "$dir"/..
    [ -f "$dir"/*.part ] || trash "$dir"
' {} ';'

答案 1 :(得分:1)

正如@fedorqui所说,这是你的“代码”中的一个错误,它没有引用目录名称。但是,要回答您的问题如何从shell中的变量/目录中删除空格?

dir="Program Files"
new_dir=${dir// /}
mv "$dir" "$new_dir"

Bash和ksh93(以及其他地方)支持字符串替换。 ${dir// /}表示:接受变量dir并将全局(//)模式 space 替换为空(最终/之后的文本)。