Возможно ли такое расширение в Bash?

Ваше выражение findдостаточно просто, чтобы его можно было воспроизвести с помощью подстановки оболочки bash:

shopt -s globstar nocaseglob
for book in $HOME/Coding/**/*javascript*.pdf
do
  ln -s "$book" "js_books/$(basename "$book")" 
done

Сначала мы сообщаем bash, что нужно включить нечувствительное к регистру -подстановку имен файлов и иметь возможность рекурсивно использовать подкаталоги через **, затем мы перебираем в цикле все имена файлов, соответствующие « (что угодно )javascript (ничего )pdf". Для каждого из этих имен файлов мы создаем символическую ссылку на книги js _.

Вы опустили начало каждого имени файла, поэтому я просто отмечу, что вы захотите указать полный путь в цикле for, чтобы команда lnсоздавала действительные символические ссылки (или же использовать правильное количество префиксов ../в цели символической ссылки ). Я заменил ваш find ~на $HOME/Codingна тот случай, если вы использовали другой начальный каталог.

1
20.03.2020, 20:13
1 ответ

Да, это легко сделать с помощью раскрытия фигурной скобки:

apt install emacs-{ivy,emms,magit}

Это будет расширено оболочкой до

apt install emacs-ivy emacs-emms emacs-magit

перед вызовом apt.

Этот тип раскрытия фигурных скобок расширяется до каждого разделенного запятой -слова в {...}.Если к фигурным скобкам (прикреплена строка префикса и/или суффикса, как в этом примере ), эта строка будет дублироваться для каждого слова.

Другой тип раскрытия фигурных скобок предназначен для диапазонов, как в {0..10}или {k..z}. Это работает аналогичным образом, но с диапазоном либо отдельных буквенных символов, либо цифр.

Расширения фигурных скобок полностью задокументированы в bashруководстве(man bashна вашем терминале ), в разделе, метко названном «Расширение фигурных скобок».

Расширения фигурных скобок поддерживаются bashи некоторыми другими распространенными оболочками с различными возможностями расширения и форматирования, но это не стандартная функция POSIX.

2
28.04.2021, 23:20

Теги

Похожие вопросы