我试图将我的一些视频文件移到新的子目录中,同时也在我的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个位置参数:
内容提要重命名[选项]表达式替换文件...
因此,在您的情况下,第一个参数将被解释为一个选项。您可以使用以下语法:
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' ''
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句