0

ラップトップの hdd から外部ドライブに大きなファイルをコピーするときに、転送の進行状況を確認できる小さなシェル スクリプトを作成しようとしていました。コマンドラインからは、これは pv と単純なリダイレクトを使用した単純な偉業ですが、行はかなり長く、ファイルサイズを知る必要があります (これがスクリプトが必要な理由です)。

console: du filename (正確なファイルサイズを取得するため)

コンソール: 猫のファイル名 | pv -s FILE_SIZE -e -r -p > dest_path/ファイル名

シェル スクリプトにegrep "[0-9]{1,}" -oを追加して、ファイル名を削除し、du の戻り値からサイズ番号だけを保持しました。残りは簡単なはずです。

#!/bin/bash
du $1 | egrep "[0-9]{1,}" -o
sudo cat $1 | pv -s $? -e -r -p > $2/$1

問題は、これを使用して file12345.mp3 をコピーしようとすると、egrep がファイル名から 12345 を取得しているため、あいまいなリダイレクト エラーが発生することですが、サイズが必要なだけです。つまり、最初の行からの戻り値は実際には次のようになります。

ファイルサイズ

12345

それはそれを悩ませます。最初の " " (スペース) まで最初の数字だけを解析するには、このスクリプトをどのように変更すればよいですか?

前もって感謝します。

4

1 に答える 1

0

私があなたを正しく理解しているなら:

duコマンド出力からファイルサイズのみを保持するには:

du $1 | awk '{print $1}'

(最初のフィールドがファイルのサイズであると想定)

エラーを回避するために、リダイレクトに二重引用符を追加します。

sudo cat $1 | pv -s $? -e -r -p > "$2/$1"

$2にはスペースが含まれているため、この引用は行われます。

于 2013-03-15T06:22:24.017 に答える