LINUX.ORG.RU

Как перезаписать содержимое всех текстовых файлов содержимым одного файла?

 ,


0

0

Есть папка в которой расположена куча файлов с расширением .srf (текстовые файлы).

Есть файл sample.srf содержимым которого надо перезаписать содержимое всех .srf файлов в указаной папке.

★★★★★

Последнее исправление: atsym (всего исправлений: 2)
Ответ на: комментарий от shell-script

Не сработало

$ find ./ -type f -name "*.srf" -exec cat /path/to/sample.srf > '{}'\;
find: missing argument to `-exec'
Try 'find --help' for more information.
atsym ★★★★★
() автор топика
tee *.srf > /dev/null < /path/to/sample.srf
surefire ★★★
()
Ответ на: комментарий от shell-script

Это всё равно не будет работать. Ну никак вообще, тут минимум 2 ошибки.

Почитай пожалуйста man bash раздел REDERECTION обрати внимание на символ >. Затем загляни в man find почитай справку по -exec разберись с тем, что он не вызывает шел.

Так REDIRECT у тебя ломает всю логику find, но если решить эту проблему, то всплывает вторая проблема. Если в -exec не использовать shell, то cat будет считать файлом>

Чтобы это работало так как задумано, должно быть примерно так:

find ./ -type f -name "*.srf" -exec sh -c 'cat /path/to/sample.srf > {}' \;

Это хоть и работает, но не проще ли использовать cp, ведь перезаписанный файл эквивалент скопированного:

find ./ -type f -name "*.srf" -exec cp /path/to/sample.srf `{}` \;
surefire ★★★
()
Ответ на: комментарий от atsym

for file in $(find ./ -type f -name "*.srf");

Это такое масло масляное, что у меня даже с монитора потекло. Кроме всего прочего ещё и уязвимое к именам файлом.

surefire ★★★
()
Ответ на: комментарий от surefire

Это такое масло масляное, что у меня даже с монитора потекло. Кроме всего прочего ещё и уязвимое к именам файлом.

Печальная тендеция, когда народ стал воспринимать сообщения из stackoverflow как верх правильности :(

vodz ★★★★★
()
Ответ на: комментарий от surefire

Кроме всего прочего ещё и уязвимое к именам файлом.

Кстати, да. У меня выбивало ошибки что мол некоторые srf-файлы не найдены, при этом показывало список из нескольких файлов *.srf.

atsym ★★★★★
() автор топика
Ответ на: комментарий от surefire

man bash раздел REDERECTION

Как говорит один местный корректор, который метит в модераторы -«орнул в голосину». Ты так хорошо оформил пост, а опечатку капсом не заметил.

anonymous
()
Ответ на: комментарий от surefire

Всё верно. Я показал принцип работы. Команду не запускал, а комент писал с телефона.

shell-script ★★★★★
()
Ответ на: комментарий от vodz

Зацепился за фразу ТС про содержимое файла. Как уже в этом треде правильно подметили, cp в данном случае лучше. Я лишь показал пример, как использовать find для таких простых задач.

shell-script ★★★★★
()
Ответ на: комментарий от shell-script

Как уже в этом треде правильно подметили, cp в данном случае лучше.

Не так всё было. Мне было лень расписывать, но нашелся добрый человек, который не поленился объяснить, что дело вовсе не в «лучше»…

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от vodz

Вот я не пойму, зачем ты к словам придираешься? Повторяю: я дал совет использовать find. Что конкретно надо использовать в -exec на усмотрение пользователя. Я уже дважды написал, что cat, который я вписал в команду с телефона по памяти, тут не подходит. Но нет, ты все-равно продолжаешь о чём-то спорить.

shell-script ★★★★★
()

надо перезаписать содержимое всех — файлов

Чё, на подходе новый вирус шифровальщик на баше ?

anonymous
()
Ответ на: комментарий от shell-script

Вот я не пойму, зачем ты к словам придираешься?

Потому что вы попытались обмануть, «лучше» означает что оно работает, но есть способ сделать по другому с некими критериями «лучше». А у вас было в принципе неправильно.

Я уже дважды написал, что cat, который я вписал в команду с телефона по памяти, тут не подходит.

Ну вот опять 25. Почему не подходит? Вам дали скрипт с cat, и оно как раз из разряда «хуже».

Повторяю: я дал совет использовать find.

А вот тут как раз и плохой совет. Оно тут нафиг не нужно. «Есть папка в которой расположена куча файлов с расширением .srf » (c) ТС. Накой тут find? Если бы там был, скажем -delete (хотя тоже не posix-стандарт) оно ещё имело бы смысл, но тут одна папка и куча fork-ов на bash, который тоже бы форкался на cat.

for f in *.srf; do cp sample.srf "$f"; done

vodz ★★★★★
()
Ответ на: комментарий от vodz

Эпично. То, что ты перезаписываешь sample.srf, не забыл? Потенциально содержание может отличаться, а значит это приведет к совсем не тому результату, что ожидает ТС. Неправильный пример, я считаю. Правильно сначала вынести sample.srf подальше, а потом проводить копирование.

anonymous
()
Ответ на: комментарий от vodz

И чем вам ‘cp’ не угодил?

А чо сразу cp? Здравый смысл подсказывает хардкор: т.е. первый файл - cp, остальные - ln -f на первый.

anonymous
()
Ответ на: комментарий от anonymous

Эпично. То, что ты перезаписываешь sample.srf, не забыл?

Тут все примеры этим грешат и подразумевается, что это надо проверять дополнительно. И как раз в этот однострочник эту проверку сделать наиболее просто. Но ведь оно просто ругнется и ничего особо страшного на самом деле не произойдёт.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от anonymous

т.е. первый файл - cp,

См выше - то что копируется тоже такой же выходной файл, и потому и не надо первый/последующие. Но куча хардлинков непонятно накой надо в одном каталоге, может у него потом в каждый будет внесено маленькое изменение и хардлинки будут только мешать.

vodz ★★★★★
()
Ответ на: комментарий от vodz

куча хардлинков непонятно накой надо в одном каталоге

Только для одного: ему нужна структура каталогов и файлов без содержимого именно в виде структуры файлов.

anonymous
()
Ответ на: комментарий от anonymous

Только для одного: ему нужна структура каталогов и файлов без содержимого именно в виде структуры файлов.

Какая-то чушь спора ради спора. У него и так уже есть структура, содержимое только разное. Что потом будет нет смысла гадать, всё что угодно, может и это только шапки файлов, которые будут дополняться и так далее.

vodz ★★★★★
()
Ответ на: комментарий от atsym

cat /path/to/sample.sr

Самый простой ответ. Чего то там выше наворочили, не пойму..

Bootmen ☆☆☆
()
Ответ на: комментарий от vodz

Потому что вы попытались обмануть

Строить теории об обмане и интригах вокруг однострочника, который написан по памяти для разовой задачи за пять секунд - это очень круто.

А ещё круто не читать коментарии. Про cat уже никто ничего не говорит, но ты всё ещё цепляешься за него.

shell-script ★★★★★
()
Ответ на: комментарий от shell-script

Строить теории об обмане

Какие теории? Натуральный факт.

вокруг однострочника, который написан по памяти для разовой задачи за пять секунд - это очень круто.

К этому вам никто не предъявляет претензии. Все люди могут ошибаться. Но почему-то тут принято юлить и хамить, переводить стрелки.

Про cat уже никто ничего не говорит, но ты всё ещё цепляешься за него.

Именно вы вот только всё время про него говорите, вот опять только что.

vodz ★★★★★
()
Ответ на: комментарий от shell-script

А твой троллинг довольно уныл. Удачи.

Вот и я говорю, что без хамства и прочего «сам дурак» ну никак тут не могут.

vodz ★★★★★
()
parallel cp ./sample.srf ::: ./*srf
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.