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が言ったように、ディレクトリ名を引用していない「コードのビット」のバグです。ただし、質問に答えるには、シェルの変数/ディレクトリからスペースを削除する方法は? :

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

文字列の置換は、Bash と ksh93 (およびおそらく他の場所) でサポートされています。 ${dir// /}意味: 変数を取り、グローバルに ( ) パターンスペースdirを何も置き換えません ( final の後のテキスト)。///

于 2013-10-21T10:25:58.207 に答える