find: 'count=1': 対応するファイルやディレクトリはありません。

find: 'count=1': 対応するファイルやディレクトリはありません。

前のコード:

total=`ls -Rp rootfs | wc -l`
count=0

変数に簡単な追加を割り当てる場合:

sudo find rootfs -exec cp -d -- "{}" "/media/$USER/{}" 2> /dev/null \; -exec sync \; -exec count=$((count+1)) \; -exec echo -en "\rcopiati: $count/$total" \;

私は得る:

find: ‘count=1’: No such file or directory

私が実行したとき:

sudo find rootfs -exec cp -d -- "{}" "/media/$USER/{}" 2> /dev/null \; -exec sync \; -exec count=1 \; -exec echo -en "\rcopiati: $count/$total" \;

私も同じミスを犯した。なぜ?

コピーされたファイルごとにカウンタが欲しい:1/13444、2/13444、3/13444などに更新...

編集する:

方法が見つかりましたが、隠しファイルは表示されません。 forループで隠しファイルを表示するにはどうすればよいですか?

#!/bin/bash
copysync() {
    countfiles() {
        for f in $1/*; do
            if [ -d "$f" ]; then
                countfiles "$f"
            else
                if [ "${f: -2}" != "/*" ]; then
                    total=$((total+1))
                fi
            fi
        done
    }
    recursivecp() {
        for f in $1/*; do
            if [ -d "$f" ]; then
                mkdir -p "/media/$USER/$f"
                recursivecp "$f"
            else
                if [ "${f: -2}" != "/*" ]; then
                    sudo cp -a "$f" "/media/$USER/$f"
                    sudo sync
                    count=$((count+1))
                    echo -en "\rCopied: $((count*100/total))%"
                fi
            fi
        done
    }
    total=0
    countfiles $1
    count=0
    recursivecp $1
}
copysync rootfs

ベストアンサー1

シェルはcount=$((count+1))実行前に拡張されますfind

次に、引数をコマンドとして実行findしようとします。-execこれは、シェル組み込み関数や変数を割り当てるシェル構文ではなく、プログラムまたはスクリプトでなければなりません。

find新しいプロセスが開始されるため、見つかったファイルの数はこの方法でカウントできないため、変数の割り当て-exec結果は親シェルで使用できません。

見つかったファイルごとに1行印刷して出力findにパイピングすることをお勧めしますwc -l

find rootfs -exec cp -d -- "{}" "/media/$USER/{}" \; -exec sync \; -print|wc -l

ファイルのコピー中にいくつかの出力を取得するには、次のコマンドを使用できます。

find rootfs|while IFS= read -r file
do
    cp -d -- "$file" "/media/$USER/$file"
    sync
    count=$((count+1))
    echo -en "\rcopiati: $count/$total"
done

コメント:

改行文字(およびその他の特殊文字)を含むファイル名には機能しません。

rootfsサブディレクトリが含まれていると、スクリプトが機能しない可能性があります。この状況を処理するか、findオプションを使用してこの問題を回避する必要-maxdepthがあります。-type f

おすすめ記事