我的媒体播放器通过创建一个名称完全相同但添加了“.t”扩展名(在同一文件夹中)的新文件来将视频文件标记为已观看。例如,在我观看“SeinfeldS07E02.mp4”后,它将生成一个名为“SeinfeldS07E02.mp4.t”的文件
我想让所有观看过的视频文件自动移动到另一个文件夹,并且认为最好的方法是通过一个 shell 脚本来查找 *.t 文件,然后找到其名称所基于的原始文件,并将该文件移动到另一个文件夹。我已经有一个非常简单的脚本可以查找和移动 *.t 文件,但我不知道如何进一步缩小范围。这可行吗?
答案1
为了避免文件名包含空格或更糟的情况出现意外,可能值得直接从以下位置运行所有内容find
:
find /PATH/TO/SOURCE -name '*.mp4' \
-exec sh -c '[ -e "$1.t" ]
&& mv -- "$1" /PATH/TO/TARGET
&& rm -- "$1.t"' _ {} \;
答案2
for i in $(find /path -type f -name "*.mp4.t") ;执行 mv $(echo $i | sed "s/.mp4.t/.mp4/") /path/to/otherfolder/ ;完毕
我想可能就足够了
模拟它:
[root@h2g2w ~]# mkdir {toto,titi}
[root@h2g2w ~]# touch toto/{a,b,a.t,b.t,c}
[root@h2g2w ~]# for i in $(find toto/ -type f -name "*.t") ; do mv $(echo $i | sed "s/\.t//") titi/ ; done
[root@h2g2w ~]# ls -l titi
total 0
-rw-r--r--. 1 root root 0 1 janv. 15:13 a
-rw-r--r--. 1 root root 0 1 janv. 15:13 b
[root@h2g2w ~]# rm -rf toto titi
[root@h2g2w ~]# #OK only a & b have moved