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
() автор топика
Ответ на: комментарий от 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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.