grep间距错误

时间:2012-12-30 20:48:51

标签: bash shell

大家好我有grep的问题。我不知道shell脚本中是否还有其他搜索代码。   我正在尝试备份存储在我的Flash Disk中的文件夹AhmetsFiles,但同时我要按照扩展名将它们分组并保存到[extensionName]文件夹中。

AhmetsFiles

  

一个例子:/media/FlashDisk/AhmetsFiles/lecture.pdf必须存储在/ home / $(whoami)/ Desktop / backups / pdf

问题是我无法复制名称中包含空格的文件。(讲座2.pptx)   在此介绍之后我的代码。

    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

2 个答案:

答案 0 :(得分:2)

您的循环比需要的更复杂,不需要lsgrepfilesfCount变量:

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

这适用于空格。

我假设您确实想将$extension解释为文件扩展名,而不是像原始代码那样在文件名中间使用一些随机字符串。

答案 1 :(得分:1)

你为什么不

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

代替?

此外,我相信您可能更喜欢grep -i ".$extension$"之类的东西(将其锚定到行尾)。

另一方面,最佳方式可能是

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