Добавление одной переменной в несколько частей псевдонима? alias nd='mkdir $1' работает, но не может добавить ничего после, почему? [duplicate]

На этот вопрос уже есть ответ здесь:

У меня есть псевдоним

alias moveit='mkdir $1 && find -name "*$1*" -type f -exec mv -t ~/$1 {} +'

Но я не совсем уверен, что делаю неправильно.
Любая помощь будет очень признательна.

Я пытаюсь сделать псевдоним, который при наборе moveit pdf

  1. Создает каталог под названием pdf в текущем рабочем каталоге.
  2. Ищет все файлы, содержащие в имени pdf, в рабочем каталоге и всех его подкаталогах.
  3. Перемещает найденные файлы в новую папку с именем pdf.

Я знаю, что pdf вернет другие файлы, которые не являются pdfми. По сути, я пытаюсь создать скрипт автоматической сортировки.

У меня есть файлы с именами:

greatfile[pdf].rar
greatfile[txt].rar
greatfile[rtf].zip
badfile[pdf].zip
badfile[txt].zip
badfile[rtf].rar
okayfile[pdf].tar.bz
okayfile[txt].zip
okayfile[rtf].rar

И я хочу отсортировать эти файлы в папки с именами pdf, txt и rtf, все в одном скрипте, или, по крайней мере, пока по одному за раз.

6
задан 25 August 2019 в 07:32

1 ответ

Для создания этой работы необходимо использовать временную функцию:

alias moveit='f() { mkdir "$1" && find -name "*$1*" -type f -exec mv -t "$1" {} +; unset -f f; }; f'

Это работает как ожидалось. Например, moveit pdf перемещения все файлы, которые содержат строку pdf к недавно созданному каталогу pdf.

Часть определения f() { mkdir "$1" && find -name "*$1*" -type f -exec mv -t "$1" {} +; unset -f f; }; определяет функцию и последнюю часть f вызывает эту функцию.
Последняя часть функционального определения unset -f f;

удаляет функциональное определение, поскольку псевдоним выполняется так, это не бродит вокруг впоследствии.

Для получения дополнительной информации взгляните на это, "Как передать параметры псевдониму?" вопрос.

1
ответ дан 23 November 2019 в 08:11

Другие вопросы по тегам:

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