разделение файлов, объединенных хвостом

Я копирую файлы php с удаленного веб-сервера из telnet. Я использовал [эту] [1] команду

tail -n +1 file1.txt file2.txt file3.txt

для объединения, но теперь я хочу разделить этот файл на отдельные файлы.

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

 grep -irn "==>" php.dump |cut -d: -f1

 grep -irn "==>" php.dump |cut -d' ' -f2 

теперь я хочу использовать эту информацию для разделения файлов.

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

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

Примечание: я знаю, что это было бы легко с tar, но, к сожалению, нет команды tar и у меня нет привилегий root для этого сервера.

пометить несколько файлов, но указать имя файла в качестве заголовков


person Devidas    schedule 05.12.2016    source источник
comment
Не объединяйте их в первую очередь ?for i in {1,2,3};do tail -n +1 "file${i}.txt" >"newfile.${1}";done.   -  person 123    schedule 05.12.2016
comment
привет, спасибо за ответ, но вся причина, по которой я делаю это как замену tar. поскольку tar объединяет файлы и извлекает их на другом компьютере. Я делаю это без команды tar, так как она недоступна.   -  person Devidas    schedule 05.12.2016
comment
Почему бы вам просто не передать файлы? Попытка эмулировать tar буквально бесполезна.   -  person 123    schedule 05.12.2016


Ответы (1)


Поскольку вы используете бедняка tar -c, вот бедняга tar -x:

$ awk 'match($0, /^==> (\w+) <==$/, res) { file = res[1]; next }
                                         { print > file".new" }' comb_file.txt

С вводом типа:

==> file1 <==
hello1

==> file2 <==
hello2

==> file3 <==
hello3

Будут созданы три файла: file1, file2 и file3, каждый из которых будет содержать строки между ==> xxx <==.

Это означает, что конечная пустая строка будет добавлена ​​к file1 и file2. Но это может помочь вам начать.

person andlrc    schedule 05.12.2016
comment
привет, я пробовал для данного дампа, но у меня есть имя файла, например /var/www/index.php, так что это не сработало, но сработало для вашего дампа, можете ли вы предложить что-то общее - person Devidas; 05.12.2016
comment
@Devidas Должна быть возможность изменить в соответствии с вашими потребностями, например, удалив имя каталога: /^==> ([^\/]*\/)*([^\/]+) <==$/, а затем использовать res[2]. - person andlrc; 05.12.2016
comment
проблема в том, что регулярное выражение ищет все символы слова, но получает пробельные символы, такие как /, поэтому оно не соответствует - person Devidas; 05.12.2016
comment
а вы использовали .new для какой цели? - person Devidas; 05.12.2016
comment
@Devidas Ни для кого, в основном просто для того, чтобы дать вам возможность отменить, если вы сделали tail -n +1 a b c | awk ... - person andlrc; 05.12.2016
comment
проверьте, можете ли вы улучшить ответ с помощью комментария. Так что это будет полезно для тех, кто будет искать для этого. Просто облегчи ему жизнь. - person Devidas; 05.12.2016