1

1TBを超えるプロジェクトファイルを含む外付けドライブがあります。再編成できるようにこのドライブを再フォーマットする必要がありますが、その前にすべてを転送する必要があります。問題は、私がMacを使用していて、ドライブがNTFSとしてフォーマットされているため、そこからコピーすることだけです。Finderでコピーして貼り付けようとしましたが、その方法でコピーしてから約15分後にドライブがロックされたようです。そこで、1000以上のファイルすべてを一度に1つずつ繰り返すbashスクリプトを作成することにしました。これは、スペースがないファイルでは機能するようですが、スペースに入るとスキップします。

これが私がこれまで一緒にハックしたものです..私はbashにあまり進んでいないので、スペースをどのように処理するかについての提案は素晴らしいでしょう。

quota=800
size=`du -sg /Users/work/Desktop/TEMP`
files="/Volumes/Lacie/EXR_files/*"

for file in $files
do
    if [[ ${size%%$'\t'*} -lt $quota ]];
    then
        echo still under quota;
        cp -v $file /Users/work/Desktop/TEMP_EXR;
        du -sg /Users/work/Desktop/TEMP_EXR;
    else
        echo over quota;
    fi
done

(ディレクトリサイズをチェックしているのは、この一時的なコピーをいくつかの異なる場所に分割してから、すべてを1つの再フォーマットされたドライブにコピーして戻す必要があるためです。)

4

2 に答える 2

5

誤解していないことを願っています。ファイル名の空白文字に問題がある場合は、それを引用してください。bash にその内部のパラメーターを展開させたい場合は、二重引用符を使用します。

cp -v "$file" /Users/work/Desktop/TEMP_EXR
于 2012-08-12T21:08:59.873 に答える
0

すべてのファイル名を配列に入れてから、それを繰り返すことができます。

quota=800
size=`du -sg /Users/work/Desktop/TEMP`
files=( /Volumes/Lacie/EXR_files/* )

for file in "${files[@]}"
do
    if [[ ${size%%$'\t'*} -lt $quota ]];
    then
        echo still under quota;
        cp -v "$file" /Users/work/Desktop/TEMP_EXR;
        du -sg /Users/work/Desktop/TEMP_EXR;
    else
        echo over quota;
    fi
done

注意すべき 2 つの点は、1) for リストで配列展開を引用すること、および 2)コマンドを引用$fileすることです。cp

于 2012-08-13T13:28:22.117 に答える