Добавить строку в пустые файлы

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
sedikpoll
Сообщения: 100

Добавить строку в пустые файлы

Сообщение sedikpoll »

Нужно найти пустые файлы в текущей директории и поместить в них строку "123" с текущей датой.
Интуитивно понимаю что должно быть примерно так:

find ./ -empty -type f -exec echo "`date +%d-%m-%Y ` -123" '{}' \;

но где то ошибка.
Спасибо сказали:
Аватара пользователя
Brainsburn
Сообщения: 950
Статус: /
ОС: Gentoo
Контактная информация:

Re: Добавить строку в пустые файлы

Сообщение Brainsburn »

Код: Выделить всё

find . -empty -type f | while read filename; do echo "123" >> "$filename"; done
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -
Контактная информация:

Re: Добавить строку в пустые файлы

Сообщение sgfault »

sedikpoll писал(а):
24.04.2013 12:15
Нужно найти пустые файлы в текущей директории и поместить в них строку "123" с текущей датой.
Интуитивно понимаю что должно быть примерно так:

find ./ -empty -type f -exec echo "`date +%d-%m-%Y ` -123" '{}' \;

но где то ошибка.

Ну, вы попробуйте запустить команду добавления "123", подставив вручную вместо {} какое-нибудь имя файла, и сразу поймете, где ошибка:

Код: Выделить всё

$ touch 1.tmp
$ echo "`date +%d-%m-%Y ` -123" 1.tmp
24-04-2013 -123 1.tmp
$ cat 1.tmp
$

Видите? Не хватает перенаправления вывода в файл. Чтобы его добавить в '-exec', вам придется запускать sh, а не просто echo:

Код: Выделить всё

$ find ./ -empty -type f -exec sh -euf -c 'echo "`date +%d-%m-%Y ` -123" > "$1"' sh '{}' \;


Ну, и раз уж запускается sh, можно обрабатывать нескольких файлов сразу:

Код: Выделить всё

$ find ./ -empty -type f -exec sh -euf -c 'for f; do echo "`date +%d-%m-%Y ` -123" > "$f"; done' sh '{}' \+

Спасибо сказали:
Ответить