user1763370
user1763370

Reputation:

grep spacing error

Hi guys i've a problem with grep . I don't know if there is another search code in shell script. I'm trying to backup a folder AhmetsFiles which is stored in my Flash Disk , but at the same time I've to group them by their extensions and save them into [extensionName] Folder.

AhmetsFiles

An example : /media/FlashDisk/AhmetsFiles/lecture.pdf must be stored in /home/$(whoami)/Desktop/backups/pdf

Problem is i cant copy a file which name contains spaces.(lecture 2.pptx) After this introduction here my code.

    filename="/media/FlashDisk/extensions"
    count=0
    exec 3<&0
    exec 0< $filename

    mkdir "/home/$(whoami)/Desktop/backups"

    while read extension
    do
        cd "/home/$(whoami)/Desktop/backups"
        rm -rf "$extension"
        mkdir "$extension"
        cd "/media/FlashDisk/AhmetsFiles"
        files=( `ls | grep -i "$extension"` )
        fCount=( `ls | grep -c -i "$extension"` )
        for (( i=0 ; $i<$fCount ; i++ ))
        do
            cp -f "/media/FlashDisk/AhmetsFiles/${files[$i]}" "/home/$(whoami)/Desktop/backups/$extension"
        done
        let count++
    done

    exec 0<&3

    exit 0

Upvotes: 0

Views: 120

Answers (2)

Thomas
Thomas

Reputation: 181715

Your looping is way more complicated than it needs to be, no need for either ls or grep or the files and fCount variables:

    for file in *.$extension
    do
        cp -f "/media/FlashDisk/AhmetsFiles/$file" "$HOME/Desktop/backups/$extension"
    done

This works correctly with spaces.

I'm assuming that you actually wanted to interpret $extension as a file extension, not some random string in the middle of the filename like your original code does.

Upvotes: 2

Michael Krelin - hacker
Michael Krelin - hacker

Reputation: 143061

Why don't you

grep -i "$extension" | while IFS=: read x ; do
  cp ..
done

instead?

Also, I believe you may prefer something like grep -i ".$extension$" instead (anchor it to the end of line).

On the other hand, the most optimal way is probably

cp -f /media/FlashDisk/AhmetsFiles/*.$extension "$HOME/Desktop/backups/$extension/"

Upvotes: 1

Related Questions