スクリプトを使用して作成された年に基づいていくつかのファイルをコピーしています。空白のないファイルにはうまく機能しますが、空白のあるファイルに対するstatsコマンドには問題があります。たとえば、次のファイルがあります。file with spaces.pdf
stat -c %y ./path/to/file\ with\ spaces.pdf|cut -d '-' -f 1
年を返します。例:2017
ただし、スクリプトで使用されている場合:
year=$(stat -c %y $pathfile | cut -d '-' -f 1)
次の出力を使用すると動作しないようです。
echo "stat -c %y file | cut -d '-' -f 1"
端末にコピーすると機能します。ファイル名のこの部分を無視するなど、すべての場合でエラーは同じですwith\ spaces.pdf
。 ::
stat: cannot stat './path/to/file\': No such file or directory
パスに引用符を追加しようとしましたが、うまくいかないようです。
year=$(stat -c %y "$pathfile" | cut -d '-' -f 1)
どこかで統計を関数に入れなければならないことを見て、次のようにしました。
makestats () {
$(stat -c %y $1|cut -d '-' -f 1)
}
しかし、うまくいかないようです。同じエラーが発生します。助けてくれればいいと思います。
ベストアンサー1
変数を引用してくださいbash
。そうしないと、変数の単語が個々のトークンに分割され、変数を使用するコマンドは、単一の文字列が予想されるときに複数の単語を取得します(参照)噴射シェルから)
year=$(stat -c %y "$pathfile" | cut -d '-' -f1)
あなたの問題は、使用中の変数"
と\
エスケープシーケンスにあると思います。どちらかを行う必要があります。
pathfile="/path/to/file with spaces"