for name in `ls` and filenames with spaces
next code doesnt work because of spaces in file names, How to fix? 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 Just don't use command substitution: use for name in * . Replace for name in `ls` with: ls | while read name Notice : bash variable scoping is awful. If you change a variable inside the loop, it won't take effect outside the loop (in my version it won't, in your version it will). In this example, it doesn't matter. Notice 2 : This works for file names with spaces, but fails for some other