0

こんにちはみんな grep に問題があります。シェルスクリプトに別の検索コードがあるかどうかはわかりません。Flash Disk に保存されているフォルダー AhmetsFiles をバックアップしようとしていますが、同時にそれらを拡張子でグループ化し、[extensionName] フォルダーに保存する必要があります。

Ahmetsファイル

例: /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

ループは必要以上に複雑で、lsorgrepまたはfilesandfCount変数は必要ありません。

    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 に答える