如何根据文件名称的公共部分将文件移动到子目录?
例如,对于名为 和 的文件comment_LastName.pdf
以及名为where all和变化的comment_LastName.md
子目录,如何将文件移动到 subdirectory ? (但同时适用于所有文件/目录)FirstName_LastName/
FirstName
LastName
comment_X.pdf
Mister_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
命令中,我们将文件名标记到目录数组组件。目标目录的通配必须分开,因为这些文件尚不存在。否则通配将会失败。