将一个变量添加到别名的多个部分?alias nd='mkdir $1' 有效但之后无法添加任何内容,为什么?

ser*_*rge 6 command-line bash alias find

我有别名

alias moveit='mkdir $1 && find -name "*$1*" -type f -exec mv -t ~/$1 {} +'
Run Code Online (Sandbox Code Playgroud)

但我不太确定我做错了什么。
任何帮助将非常感激。

我正在尝试在键入时创建别名 moveit pdf

  1. 创建一个pdf在当前工作目录中调用的目录。
  2. pdf在工作目录及其所有子目录中搜索名称中包含的所有文件。
  3. 将那些找到的文件移动到名为pdf.

我知道这pdf会返回不是pdfs 的其他文件。我基本上是在尝试创建一个自动排序脚本。

我有文件叫:

alias moveit='mkdir $1 && find -name "*$1*" -type f -exec mv -t ~/$1 {} +'
Run Code Online (Sandbox Code Playgroud)

我想将这些文件分类到名为pdftxt和 的文件夹中rtf,所有这些都在一个脚本中,或者现在至少一次一个。

zx4*_*485 1

要实现此功能,您必须使用一个临时函数:

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

它按预期工作。例如,moveit pdf将包含该字符串的所有文件移动pdf到新创建的目录中pdf

定义部分f() { mkdir "$1" && find -name "*$1*" -type f -exec mv -t "$1" {} +; unset -f f; };定义函数,最后部分f调用该函数。
函数定义的最后一部分unset -f f;

在执行别名时删除函数定义,这样它就不会在之后徘徊。

有关更多信息,请查看“如何将参数传递给别名?” 问题。

  • @serge 您可以使用函数轻松地完成所有这些工作(并且在这种情况下,更加容易)。如果需要,函数甚至可以直接在“.bash_aliases”中定义。将函数定义放在那里会令人困惑,但仍然比在其中放一个别名更容易混淆,因为别名实际上只是函数的包装,不需要别名。函数通常在“.bashrc”或由“.bashrc”来源的某些文件中定义。(“.bash_aliases”源自“.bashrc”;您也可以在其中获取其他文件。) (2认同)