2

есть файлы с пробелами в названиях и есть такая команда:

p=$(for f in [а-Я]*.txt; do n=$(sed '$a\' $f | wc -l); echo -n "| tee >(head -n $n > new/$f) | tail -n $((s-n)) "; done)

но она не хочет работать из за пробелов в названиях файлов. или я маску неправильно подобрал?

Как решить проблему?

c4pQ
  • 745
Новичок
  • 609
  • 4
  • 12

1 Answers1

2

не хочет работать из за пробелов в названиях файлов

заключите переменную, содержащую имя файла, в двойные кавычки:

... "$f" ...

или я маску неправильно подобрал?

так проверьте, какие файлы подпадают под маску:

$ ls маска
  • когда проверяю это паттерн [а-я]* через $ ls , то машина отображает нужные мне файлы, но когда использую его в деле, то возникает проблема с пробелами, машина воспринимает пробел как окончание названия файла . "$f" кавычки не помогли – Новичок Aug 11 '16 at 00:42
  • Допустим есть файл "текстовый файл.txt" , применяю команду описанную в топике и получаю: "sed: невозможно прочитать текстовый: No such file or directory sed: невозможно прочитать файл.txt: No such file or directory" – Новичок Aug 11 '16 at 00:48
  • попробуйте выяснить, в чём причина, методом упрощения выражения. кстати, у вас там ещё раз встречается $f. там просто "$f" не пойдёт, т.к. строка уже находится в кавычках. – aleksandr barakin Aug 11 '16 at 05:57
  • в некоторых случаях в подобной ситуации бывает проще переименовать файлы, чем «заниматься сексом» с их извращёнными именами. – aleksandr barakin Aug 11 '16 at 06:02
  • думаю можно заменить пробелы в названиях символами подчеркивания. Вы случайно не знаете как это сделать массово? – Новичок Aug 11 '16 at 06:09
  • prename 's/ /_/g' * – aleksandr barakin Aug 11 '16 at 06:26