使用 zsh/zmv 根据模式移动文件

使用 zsh/zmv 根据模式移动文件

如何根据文件名称的公共部分将文件移动到子目录?

例如,对于名为 和 的文件comment_LastName.pdf以及名为where all和变化的comment_LastName.md子目录,如何将文件移动到 subdirectory ? (但同时适用于所有文件/目录)FirstName_LastName/FirstNameLastNamecomment_X.pdfMister_X/

这是一次不成功的尝试,zmv但我无法找出正确的命令......

zmv -n 'comment_(*).(pdf|md)' '*_$1/$f'

答案1

$1如果您引入任何反向引用(例如and ), zmv 的目标操作数似乎会被引用$f,因此在这种情况下您无法添加通配符。我发现解决这个问题的最佳选择是使用该-p标志并给zmv出自定义mv函数。

这就是我想出的:

mv2 () {
    local dir
    dir=(*_$3:h) 
    mv $1 $2 $dir[1]/$3:t
}
zmv -p mv2 'comment_(*).(pdf|md)' '$1/$f'

mv2函数中,我们创建一个要放置文件的目录数组。然后在实际mv命令中,我们将文件名标记到目录数组组件。目标目录的通配必须分开,因为这些文件尚不存在。否则通配将会失败。

相关内容