Вот то, что я придумал:
find /path/to/dir -type f | sed -r 'p;s:.*/(.*)/.*:\1:' | xargs -n 2 sh -c 'sed -i "s/^/$1 /" $0'
Вот пример того, как команды были бы построены, предполагая, что существуют следующие файлы:
/home/the_peasant/a.txt
/home/the_peasant/b.txt
/home/the_peasant/farmer/c.txt
Первый find /home/the_peasant -type f
выведет эти файлы точно так же, как указано выше.
Затем команда sed выведет имя файла, а затем имя каталога, например:
/home/the_peasant/a.txt
the_peasant
/home/the_peasant/b.txt
the_peasant
/home/the_peasant/farmer/c.txt
farmer
Xargs будет группировать каждые дваи передайте их команде sh, чтобы в итоге вы получили следующие три команды:
$ sh -c 'sed -i "s/^/$1 /" $0' /home/the_peasant/a.txt the_peasant
$ sh -c 'sed -i "s/^/$1 /" $0' /home/the_peasant/b.txt the_peasant
$ sh -c 'sed -i "s/^/$1 /" $0' /home/the_peasant/farmer/c.txt farmer
И, наконец, это приведет к следующим командам sed, которые будут добавлять имя папки в начало каждогострока:
$ sed -i "s/^/the_peasant /" /home/the_peasant/a.txt
$ sed -i "s/^/the_peasant /" /home/the_peasant/b.txt
$ sed -i "s/^/farmer /" /home/the_peasant/farmer/c.txt