0

我有这段代码:

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然后将其传递给其余代码?

4

2 回答 2

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"
' {} ';'
于 2013-10-21T10:03:45.070 回答
1

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

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

Bash 和 ksh93(可能还有其他地方)支持字符串替换。 ${dir// /}意思是:取变量dir并全局替换(//)模式空间什么都没有(最后的文本/)。

于 2013-10-21T10:25:58.207 回答