Создайте много Symlinks с pwd и регулярными выражениями и пробелом в пути

225
Exodd

Я пытаюсь создать скрипт, чтобы файлы с одинаковым расширением оставались в папке отдельно от остальных. В частности, я хочу сценарий, который, выполняемый в папке, создает программные ссылки для всех файлов .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/ 

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

Помогите?

0

1 ответ на вопрос

0
egmont

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

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

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

первая попытка создает несколько файлов в соответствии с пробелами в пути: если, например, папка называется «мои файлы», то команда `ln -s $ PWD / *. tex sources /` создает два файла с именем `my` и` * .tex` независимо от того, что находится внутри папки Exodd 7 лет назад 0
Ой, прости, я неправильно понял ситуацию. Думал, что это были файлы .tex с пробелами в именах. Вы должны окружать `$ PWD` двойными кавычками:` "$ PWD" / * ` egmont 7 лет назад 1
Вы должны написать это в своем ответе Exodd 7 лет назад 0