Я пытаюсь создать скрипт, чтобы файлы с одинаковым расширением оставались в папке отдельно от остальных. В частности, я хочу сценарий, который, выполняемый в папке, создает программные ссылки для всех файлов .tex и помещает их в подпапку "исходники".

Я знаю, что ln хорошо справляется с регулярными выражениями, а $PWD или $(pwd) возвращает путь к текущей папке. Поэтому я попытался выполнить

ln -s $PWD/*.tex ./sources/

в моей папке, но вскоре я понял, что в моем пути есть папка с пробелами, которую ln читает как несколько файлов. Итак, я попробовал с

ln -s '$PWD'/*.tex ./sources/

а также

ln -s '$PWD/*.tex' ./sources/

но в обоих случаях сценарий создает один файл с именем *.tex в моей папке с sources . После некоторого поста я попытался изменить пробелы в пути, как эти

ln -s $(printf "%q\n" "$PWD")/*.tex sources/

ln -s '$(printf "%q\n" "$PWD")'/*.tex sources/

ln -s '$(printf "%q\n" "$PWD")/*.tex' sources/

но вывод был таким же (с разницей в дополнительный символ \).

Помогите?

1 ответ1

0

Ваша первая попытка должна сработать. Не так ли? Что он делает вместо этого?

* заменяет все совпадающие имена файлов, но впоследствии не выполняет разбиение по внутренним пробелам.

«Я знаю, что ln хорошо справляется с регулярными выражениями» - это неправильно. Во-первых, здесь вы видите шаблоны оболочки, а не регулярные выражения. Во- вторых, это не ln справиться с ними , но вашей оболочки (обычно bash до запуска ln или любую другую команду.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .