我正在尝试将我的一些视频文件移动到新的子目录中,同时也在我的 Unraid 系统上重命名它们。这些文件都遵循类似的命名约定:
featurette name-featurette.mkv
我想将这些文件从当前目录移动到子目录并重命名它们,如下所示:
featurettes/featurette name.mkv
我可以使用 find 和 execdir 创建目录并重新定位文件:
find . -type f -name *-featurette.mkv -maxdepth 2 -execdir mkdir ./featurettes/ \;
find . -type f -name *-featurette.mkv -maxdepth 2 -execdir mv {} ./featurettes/ \;
我正在努力解决重命名问题。我已经尝试过重命名命令,但无法让它在 featurettes 目录中工作,更不用说在上面的两个目录中,这是我想执行该命令的地方。我已在 featurettes 目录中尝试了以下命令:
rename \-featurette.mkv .mkv *
但是我收到错误:
invalid option -- 'f'
我认为通过转义破折号可以避免这个问题,但它似乎不起作用。任何有关如何从与其匹配的子目录中的所有文件中删除此模式的建议将非常感激。
最佳答案
从 man rename
中您可以看到此命令获取选项和 3 个位置参数:
SYNOPSIS rename [options] expression replacement file...
因此,在您的情况下,第一个参数被解释为选项。您可以使用以下语法:
rename -- '-featurette' '' *-featurette.mkv
重命名文件。 --
表示任何选项都结束了,接下来的只是位置参数。
总共,用一个 mv
进程复制文件并重命名它们:
mkdir -p target/dir
find . -maxdepth 2 -type f -name "*-featurette.mkv" -exec mv -t target/dir {} +
cd target/dir && rename -- '-featurette' '' *-featurette.mkv
如果您想重命名位于不同子目录中的多个文件,可以使用以下语法:
find . -name "*-featurette.mkv" -print0 | xargs -r0 rename -- '-featurette' ''
关于linux - 如何查找子目录中匹配模式并替换模式的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64280121/