1

Linuxを使用していて、文字列000000を含むすべてのファイルを既存のファイル/home/user/offblack.pngに置き換えたいのですが、既存のファイル名は保持します。私はしばらくの間、-execとxargsのさまざまな組み合わせでこれに取り組んできましたが、運がありませんでした。これまでのところ:

 find | grep 000000

これは私がうまく変更したいすべてのファイルをリストします。これらのファイルをコピーして既存のoffblack.pngファイルに置き換えるにはどうすればよいですか?

4

3 に答える 3

1

これが私が使うものです:

find (your find args here) \
| xargs fgrep '000000' /dev/null \
| awk -F: '{print $1}' \
| xargs -n 1 -I ORIGINAL_FILENAME /bin/echo /bin/cp /path/to/offblack.png ORIGINAL_FILENAME

展開して、関心のあるすべてのファイルを見つけ、その中の文字列「000000」をgrepします(生成されたファイルの1つがfgrep1つのファイル名だけで終わった場合に備えて、ファイルのリストに/ dev /nullを追加します-これにより、出力は常に「filename:<'000000'を含む行>」)としてフォーマットされ、ファイル名のみを削除してから、1つずつ、offblack.pngでそれらのファイルにコピーします。そこにを挿入したことに注意してください/bin/echo。それがあなたのドライランです。エコーを削除して、実際に実行します。

ファイル名に「000000」が含まれているという意味の場合:

find . -type f -a -name '*000000*' -exec /bin/echo /bin/cp /path/to/offblack.png {} \;

はるかに簡単です。:-)文字列を含む名前で現在のディレクトリの下にあるすべてのファイルを検索し、その上にoffblack.pngのコピーを実行します。繰り返しますが、私があなたに与えたのはドライランです。ライブファイアドリルのエコーを削除します。:-)

于 2011-08-04T20:42:09.947 に答える
0
find . -type f | grep 000000 | tr \\n \\0 | xargs -0i+ cp ~/offblack.png "+"
于 2011-08-04T20:33:12.603 に答える
0

Bashをもう少し使ってみましょう。

for read -r filename
do
    hit=""
    for read -r
    do
        if [[ $REPLY == *000000* ]]
        then
            hit=$filename
            break
        fi
    done < $filename

    [[ -n $hit ]] && cp /path/offblack.png $filename

done < <(find . -type -f)

検索するマニュアルページが少なくなります。

于 2011-08-05T16:58:17.710 に答える