Ваше выражение 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
на тот случай, если вы использовали другой начальный каталог.
Да, это легко сделать с помощью раскрытия фигурной скобки:
apt install emacs-{ivy,emms,magit}
Это будет расширено оболочкой до
apt install emacs-ivy emacs-emms emacs-magit
перед вызовом apt
.
Этот тип раскрытия фигурных скобок расширяется до каждого разделенного запятой -слова в {...}
.Если к фигурным скобкам (прикреплена строка префикса и/или суффикса, как в этом примере ), эта строка будет дублироваться для каждого слова.
Другой тип раскрытия фигурных скобок предназначен для диапазонов, как в {0..10}
или {k..z}
. Это работает аналогичным образом, но с диапазоном либо отдельных буквенных символов, либо цифр.
Расширения фигурных скобок полностью задокументированы в bash
руководстве(man bash
на вашем терминале ), в разделе, метко названном «Расширение фигурных скобок».
Расширения фигурных скобок поддерживаются bash
и некоторыми другими распространенными оболочками с различными возможностями расширения и форматирования, но это не стандартная функция POSIX.