LINUX.ORG.RU

пробелы в консольных командах


0

1

суть проблемы:

есть команда для копирования файлов на флешку в алфавитном порядке (музыку заливать):

 find foledername -type f | sort | tar -c -v -T - -f - -C /media/f/entertainment/mu/ctmp . | tar -xpBf - -C /media/64F8-AEF6 

команду неудобно копировать или искать в консоли, так что я загнал ее в скрипт

  #!/bin/bash
file=$1
find $file -type f | sort | tar -c -v -T - -f - -C /media/f/entertainment/mu/ctmp . | tar -xpBf - -C /media/64F8-AEF6;

скрипт сделан так, чтобы копировать строкой типа

 cpf foldername1 foldername2 

собственно, проблема в том, то когда foldername содержыт пробелы, то строка виглядит так:

 cpf folder\ name/ 

но в переменную внутри скрипта попадает «folder name», то есть с проблеами, но без «\», соответственно, find видит не «folder\ name» a «folder name», то есть кагбэ 2 разных каталога

$1, $*, $@ действуют так же

вопрос: как записывать «folder\ name/» в переменную вместе с «\» (при этом сохраняя возможность поиска нажатием tab при веденных нескольких первых буквах - read $var не прокатит)?

или

другой варант скрипта?

или

есть ли другая команда/набор команд с теми же свойствами?

Ответ на: комментарий от andy_s

А так не прокатит?

find "$file" -type f | sort | tar -c -v -T - -f - -C /media/f/entertainment/mu/ctmp . | tar -xpBf - -C /media/64F8-AEF6;

mastermind ()

> find $file
find «$file»

На досуге советую почитать Advanced Bash Scripting Guide (есть на русском).

AITap ★★★★★ ()
Ответ на: комментарий от Tanger

спасибо.

но find «$file» катит, только если инпут один

если сделать «folder\ name\ 1/ folder\ name\ 2/» find говорит, «folder name 1/ folder name 2» не найден, т.е. все инпуты слипаются в один

то же самое для $1, $*, S@

andy_s ()
Ответ на: комментарий от andy_s

игрался в консоли с переменными

echo $1 | sed -e «s/\ /\\\ /g» выводит $1 с двойными слешами на экран, а надо вывести в переменную, но если, не меняя $1, сделать

echo $1 | sed -e «s/\ /\\\ /g» > file, а потом echo $file, то выводить строку с одинарными слешами, при чем кавычки около обеих file (все 4 комбинации) не меняють дела

andy_s ()
Ответ на: комментарий от Tanger

с этими заменами оказались другие проблеми; не влазя в суть - я потратил пару часов играясь консолью - безрезульатно, дошел было даже до циклов, а потом понял, как гениально и просто все заделать:

find «$1» «$2» «$3» «$4» «$5» «$6» «$7» -type ...

работает с количеством инпутов от 1 до 7, больше семи папок все равно копировать не буду :)

спасибо всем.

andy_s ()
Ответ на: комментарий от andy_s

> find «$1» «$2» «$3» «$4» «$5» «$6» «$7» -type ...

Либо тролль, лито RTFM !@#$:

man bash в районе «$@»

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.