0

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

艾哈迈茨档案

一个例子:/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
4

2 回答 2

2

您的循环比它需要的要复杂得多,不需要lsorgrepfilesandfCount变量:

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

这适用于空格。

我假设您实际上想解释$extension为文件扩展名,而不是文件名中间的一些随机字符串,就像您的原始代码一样。

于 2012-12-30T20:55:00.503 回答
1

你为什么不

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

反而?

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

另一方面,最优化的方法可能是

cp -f /media/FlashDisk/AhmetsFiles/*.$extension "$HOME/Desktop/backups/$extension/"
于 2012-12-30T20:54:04.697 回答