ファイル名にスペースが含まれているため、次のコードは機能しません。修正方法
IFS = '\n'
for name in `ls `
do
number=`echo "$name" | grep -o "[0-9]\{1,2\}"`
if [[ ! -z "$number" ]]; then
mv "$name" "./$number"
fi
done
コマンド置換は使用せず、for name in *
を使用してください。
交換する
`ls`内の名前
と:
ls |名前を読みながら
通知:bash変数のスコープはひどいです。ループ内で変数を変更しても、ループ外では有効になりません(私のバージョンでは変更されませんが、バージョンでは変更されます)。この例では、それは重要ではありません。
通知2:これはスペースを含むファイル名で機能しますが、他の奇妙だが有効なファイル名では失敗します。以下のCharles Duffyのコメントを参照してください。
2つの潜在的な問題のように見えます:
まず、IFS変数とその割り当てにはスペースを含めないでください。の代わりに
IFS = '\n'
そのはず IFS=$'\n'
次に、for name in ls
は、ファイル名にspaces
およびnewlines
が含まれる場合に問題を引き起こします。 filename
をspaces
で処理したい場合は、次のようにします
for name in *
線の意味がわかりません
number=`echo "$name" | grep -o "[0-9]\{1,2\}"`
これにより、filename with spaces
in new lines
。それがあなたの望むことかもしれません。