На этот вопрос уже есть ответ здесь:
У меня есть псевдоним
alias moveit='mkdir $1 && find -name "*$1*" -type f -exec mv -t ~/$1 {} +'
Но я не совсем уверен, что делаю неправильно.
Любая помощь будет очень признательна.
Я пытаюсь сделать псевдоним, который при наборе moveit pdf
pdf
в текущем рабочем каталоге. pdf
, в рабочем каталоге и всех его подкаталогах. 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
, все в одном скрипте, или, по крайней мере, пока по одному за раз.
Для создания этой работы необходимо использовать временную функцию:
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;
удаляет функциональное определение, поскольку псевдоним выполняется так, это не бродит вокруг впоследствии.
Для получения дополнительной информации взгляните на это, "Как передать параметры псевдониму?" вопрос.