Форум русскоязычного сообщества Ubuntu


Автор Тема: Объединение файлов, каждый с новой строки  (Прочитано 759 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Malamut

  • Автор темы
  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3353
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
Пишу тут модули для Puppet и столкнулся с такой проблемой: нужно все файлы из рабочей директории объединить в один по возрастанию числа в начале имени файла. Тривиальный вариант, который не подходит:

cat `ls -1 | sort -n` > ../newfile
Проблемы:

1. Файлы с пробелами в именах
2. Файлы объединяются без добавления перевода строки между ними.

Вопрос, собственно в том, как побороть эти проблемы, при этом чтобы команда так и осталась однострочником и работала на более-менее всех Linux системах? Я умею писать громоздкий bash скрипт, но мне нужна именно одна небольшая команда.
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

Оффлайн Andrey P

  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
1. echo *
2. while read

---

точнее

1. for *; do

(млин тяжелое перловское прошлое):

for f in *; do
 echo "$f" # do what you want with $f - no problem with spaces
done
« Последнее редактирование: 03 Июнь 2013, 12:16:50 от nextme »

Оффлайн Malamut

  • Автор темы
  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3353
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
Ага, почему-то оказалось, что cat вставляет \n между файлами (странно, мне казалось, что вообще-то он не должен так делать).

Осталась только одна проблема - имена файлов. Казалось бы:

cat "10 test" "11 test"

работает.

ls -Q

выдаёт  "10 test" "11 test"

Но cat `ls -Q` не работает. Что можно сделать?
nextme,
Смысл в элегантном однострочнике)) Через for-то понятно, но это уже скрипт полноценный.
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Код: Bash
  1. {ls|find} | sort | while read ; do cat "$REPLY" ; echo ; done >out.txt

Смысл в элегантном однострочнике))
По-моему, сперва надо определиться с целью.
Что важнее: шашечки или ехать?

Оффлайн Malamut

  • Автор темы
  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3353
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
ArcFi,
Важно только впихать всё в одну строчку, чтобы не добавлять на сервер новый скрипт, а оставить команду только внутри модуля Puppet)

Предложенный вариант подходит, да, спасибо! Puppet его скушал)
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

 

Страница сгенерирована за 0.114 секунд. Запросов: 24.