Используя bash, как мне найти все файлы, содержащие определенную строку, и заменить их существующим файлом? - PullRequest
1 голос
/ 05 августа 2011

Я использую Linux и хотел бы заменить все файлы, содержащие строку 000000, на существующий файл /home/user/offblack.png, но сохранить существующее имя файла. Я работал над этим с различными комбинациями -exec и xargs, но не повезло. Пока что у меня есть:

 find | grep 000000

Что перечисляет все файлы, которые я хочу изменить нормально. Как мне скопировать и заменить эти файлы моим существующим файлом offblack.png?

Ответы [ 3 ]

1 голос
/ 05 августа 2011

Вот что я бы использовал:

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

Расширяя, найдите все интересующие вас файлы, вставьте в них grep для строки '000000' (добавив / dev / null в списокфайлы в случае, если один из сгенерированных fgrep s заканчивался только одним именем файла - это гарантирует, что выходные данные всегда форматируются как «имя файла:"), удалите только имена файлов, затем по одному скопируйте в эти файлы файл offblack.png. Обратите внимание, что я вставил туда /bin/echo. Это ваш пробный запуск. Удалите эхо, чтобы запустить егопо-настоящему.

Если вы имеете в виду, что имена файлов содержат "000000":

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

Гораздо проще. :-) Найти каждый файл в текущем каталогес именем, содержащим вашу строку, и запустите над ней копию offblack.png. Опять же, я дал вам пробный прогон. Удалите эхо для вашей живой пожарной тренировки.: -)

0 голосов
/ 05 августа 2011

Давайте попробуем использовать 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)

Меньше справочных страниц для поиска!

0 голосов
/ 05 августа 2011
find . -type f | grep 000000 | tr \\n \\0 | xargs -0i+ cp ~/offblack.png "+"
...